我有以下情况:
- 方框 X 上的程序 P(最多可能需要 30 分钟才能完成)。
- 框 Y 上的 WinForms 应用程序 - 这会收集 P 的输入标准。
- 因为 P 需要很长时间,我希望它始终在框 X 而不是 Y 上运行。
有人建议我尝试在 X 上使用 WCF 服务应用程序。通过服务合同从 Y 向 X 发送消息,然后这将触发程序 P。
这是对 WCF 服务应用程序项目的有效使用吗?
我遵循了这两个演练:
我现在有两个似乎可以互相交谈的项目。我可以从控制台应用程序运行以下代码,moveData
WCF 项目中的方法成功地使用基于参数的一些信息更新数据库:
static void Main(string[] args) {
Service1Client sc = new Service1Client();
sc.moveData(0,1);
sc.Close();
}
我对这种技术很陌生-请记住。以下问题:
它仅在我在 Visual Studio 中打开或运行 WCF 项目时才有效 - 这是否符合预期?换句话说,如果 WCF 没有运行,消费应用程序是否应该抛出错误?
即,如果我使用 WCF 项目关闭 Vis Studio 的实例,然后尝试运行正在使用的应用程序,我会收到错误System.ServiceModel.EndpointNotFoundException was unhandled There was no endpoint listening at...followed by address of service
消息 如何让框 X 使用此 WCF?需要在那个盒子上安装或部署什么?
消费者控制台应用程序中的 app.config 如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://....svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
name="BasicHttpBinding_IService1" />
</client>
</system.serviceModel>
</configuration>