我有一个可以在我的计算机上运行的web服务,但是当部署到网络服务器(在DMZ中)时,它不起作用。
在Web服务器上运行服务时,它会显示看似正确的WSDL和singleWSDL。使用SoapUI中的singleWSDL来测试服务会返回以下错误消息
无法处理邮件。这很可能是因为 操作'http://tempuri.org/IService1/TestStringContract'不正确 或者因为邮件包含无效或过期的安全上下文 令牌或因为绑定之间存在不匹配。安全 如果服务中止通道到期,则上下文令牌将无效 不活动。防止服务中止空闲会话 过早增加服务端点上的接收超时 结合。
从我收集到的,最可能的原因,是App.Config文件中的一个问题,我在此详述
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<system.serviceModel>
<services>
<service name="MyService.Service1" behaviorConfiguration="MyService.Service1Behavior">
<host>
<baseAddresses>
<add baseAddress = "http://localhost:{port}/MyService.Service1.svc" />
</baseAddresses>
</host>
<endpoint address="http://{external_ip}:{port}/MyService.Service1.svc" binding="wsHttpBinding" contract="MyService.IService1">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="EquitaWcfCbl.Service1Behavior">
<serviceThrottling maxConcurrentCalls="10"/>
<serviceMetadata httpGetEnabled="True" httpGetUrl="http://{external_ip}:{port}/EquitaWcfCblMyService.Service1.svc/mex"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
[update @ 2014-02-19 1400hrs]
随着进一步研究不断指出App.Config的设置;我决定拔出当前的App.Config文件并从头开始,使用WCF服务配置编辑器再次启动它,该编辑器内置于Visual Studio(工具菜单)中,一次添加一个信息并测试进度,使用以下App.Config
生成了一项工作服务<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior1">
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceMetadata
httpGetEnabled="true"
httpGetUrl=" http://{externalip}:{port}/MyService.Service1.svc/mex"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding>
<security mode="None"></security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service
behaviorConfiguration="ServiceBehavior1"
name="EquitaWcfCbl.TabletService">
<endpoint
address="http://{externalip}:{port}/MyService.Service1.svc/mex"
binding="basicHttpBinding"
bindingConfiguration=""
name="ServiceEndpoint1"
contract=" MyService.Service1" />
</service>
</services>
</system.serviceModel>
</configuration>
我(还)完全不相信这正是我们所需要的,但是通过一项有效的服务...我至少可以取得进步。