你好
我写了一个WCF双工服务。在Visual Studio中,这个服务可以正常工作,但是当我将这个服务发布并放到IIS上时,服务不会回应任何客户端。
所有的客户端都能够正确连接到这个服务。他们也能够成功调用服务,并且没有发生任何异常。
唯一的区别是这些服务(IIS 服务和 VS 托管服务)的地址。例如:
* IIS 服务地址为http://localhost/SmsService/SmsService.svc 或者更好地说是虚拟路径地址。
* VS 托管服务地址为http://localhost:1408/SmsSrevice.svc。
我已经改变了客户端的服务器地址。
以下是服务/应用程序配置:
VS 托管服务
<system.serviceModel>
<services>
<service name="SmsService.Business.SmsService"
behaviorConfiguration="ServiceBehavior">
<endpoint address="http://localhost:1408/SmsService.svc"
binding="wsDualHttpBinding"
contract="SmsService.Business.ISmsService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
IIS托管服务
<system.serviceModel>
<services>
<service name="SmsService.Business.SmsService"
behaviorConfiguration="ServiceBehavior">
<endpoint address=""
binding="wsDualHttpBinding"
contract="SmsService.Business.ISmsService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
客户端配置
<system.serviceModel>
<bindings>
<wsDualHttpBinding>
<binding name="WSDualHttpBinding_SMSService"
closeTimeout="00:10:00"
clientBaseAddress="http://MyMachinName:10300/SmsClientService"
openTimeout="00:01:00"
receiveTimeout="00:10:00"
sendTimeout="00:10:00"
bypassProxyOnLocal="false"
transactionFlow="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288"
maxReceivedMessageSize="65536"
messageEncoding="Text"
textEncoding="utf-8" useDefaultWebProxy="true">
<readerQuotas maxDepth="32"
maxStringContentLength="8192"
maxArrayLength="16384"
maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" />
<security mode="Message">
<message clientCredentialType="Windows"
negotiateServiceCredential="true"
algorithmSuite="Default" />
</security>
</binding>
</wsDualHttpBinding>
</bindings>
<client>
<endpoint address="http://SERVER1/SmsService/SmsService.svc"
binding="wsDualHttpBinding"
bindingConfiguration="WSDualHttpBinding_SMSService"
contract="ServiceReference.SMSService"
name="WSDualHttpBinding_SMSService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
即使我在服务方法的开头写了事件日志,但那也不起作用!
那么问题出在哪里呢?
编辑1
首先感谢大家。
其次,我认为我没有清楚地解释我的问题。 "这个服务在Visual Studio中工作得很好"是指在VS中,我可以通过客户端(在VS中与服务相同的解决方案中)与服务器通信。客户端可以调用服务,服务也可以调用客户端,并且工作正常(任何计算、回调、数据库操作等)。
但是,当我将在VS中完全按照要求工作的服务发布到IIS中时,它并不能正常工作(即使在我的电脑上也是如此)。这意味着客户端可以创建服务对象并连接到托管在IIS上的服务
,但是当客户端调用服务时,没有任何事件(计算、回调、数据库操作),而且服务也不会调用客户端
。
我不明白,如果我的代码中有任何错误的步骤,那么必须在VS中运行时发生。因此必须有一些我错过的东西,比如安全配置、客户端配置或其他东西
。