我有一个简单的WCF(.NET 3.5)服务应用程序,当我打开一个新项目时,该应用程序具有由VS 2008创建的默认代码。
我在web.config文件中使用以下配置进行wshttpbinding。
<system.serviceModel>
<services>
<service name="WCFTestServiceApp.Service1" behaviorConfiguration="WCFTestServiceApp.Service1Behavior">
<!-- Service Endpoints -->
<endpoint address="" binding="wsHttpBinding" contract="WCFTestServiceApp.IService1" bindingConfiguration="binding1">
<!--
Upon deployment, the following identity element should be removed or replaced to reflect the
identity under which the deployed service runs. If removed, WCF will infer an appropriate identity
automatically.
-->
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="binding1">
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="WCFTestServiceApp.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
我已运行此WCF应用程序并能够使用VS 2008 WCFTESTCLIENT发送和接收消息。 我无法使用SoapUI工具做同样的事情。当我切换到basichttpBinding时,它似乎可以作为它的SOAP 1.1版本。但是wsHttpBinding(SOAP 1.2)似乎不起作用。
以下是我在SoapUI工具中收到的请求和响应消息。
请求
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
<soap:Header/>
<soap:Body>
<tem:GetData>
<!--Optional:-->
<!--type: int-->
<tem:value>3</tem:value>
</tem:GetData>
</soap:Body>
</soap:Envelope>
响应
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/soap/fault</a:Action>
</s:Header>
<s:Body>
<s:Fault>
<s:Code>
<s:Value>s:Sender</s:Value>
<s:Subcode>
<s:Value xmlns:a="http://schemas.xmlsoap.org/ws/2005/02/sc">a:BadContextToken</s:Value>
</s:Subcode>
</s:Code>
<s:Reason>
<s:Text xml:lang="en-IN">The message could not be processed. This is most likely because the action 'http://tempuri.org/IService1/GetData' is incorrect or because the message contains an invalid or expired security context token or because there is a mismatch between bindings. The security context token would be invalid if the service aborted the channel due to inactivity. To prevent the service from aborting idle sessions prematurely increase the Receive timeout on the service endpoint's binding.</s:Text>
</s:Reason>
</s:Fault>
</s:Body>
</s:Envelope>
请告知我应该如何进行。任何帮助表示赞赏。
答案 0 :(得分:0)
是因为wsHttpBinding默认情况下集成了安全性。 试试这个来禁用WCF的安全性:
<强> WEB.CONFIG 强>
<wsHttpBinding>
<binding name="binding1">
<security mode="None">
<transport clientCredentialType="None" />
<message establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>