我正在使用Sharepoint 2007中的webpart使用WCF服务。但是它给了我以下错误:
没有终点收听 http://locathost:2929/BusinessObjectService 那可以接受这个消息。这是 通常由不正确的地址引起 或SOAP动作。请参阅InnerException,if 目前,了解更多详情。 ---> System.Net.WebException:远程 服务器返回错误:(404)不是 找到。
WCF web.config中的My Binding Details是:
<system.serviceModel>
<diagnostics performanceCounters="All">
<messageLogging logEntireMessage="true" logMessagesAtServiceLevel="false"
maxMessagesToLog="4000" />
</diagnostics>
<services>
<service behaviorConfiguration="MyService.IBusinessObjectServiceContractBehavior"
name="MyService.BusinessObjectService">
<endpoint address="http://localhost:2929/BusinessObjectService.svc"
binding="wsHttpBinding" contract="MyService.IBusinessObjectServiceContract">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyService.IBusinessObjectServiceContractBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Sharepoint站点web.config中的我的绑定详细信息是:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IBusinessObjectServiceContract"
closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00"
sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false"
hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
maxReceivedMessageSize="65536" messageEncoding="Mtom" textEncoding="utf-8"
useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:2929/BusinessObjectService.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IBusinessObjectServiceContract"
contract="BusinessObjectService.IBusinessObjectServiceContract"
name="WSHttpBinding_IBusinessObjectServiceContract">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
我可以使用终点中给出的URL在浏览器中查看WCF(及其wsdl)。所以,我猜这个网址肯定是正确的。请帮忙!!!
答案 0 :(得分:1)
我已经复制了你的代码并且它正确地为我运行,但是有一些差异。
首先,您提供的服务器端配置不完整。端点mex
失败,因为我没有IMetadataExchange
合同。当您浏览到WSDL时,这可能是您正在查看的端点。
我只是完全删除了这个端点。接下来,我在这样的行为中指定serviceMetadata元素的地址:
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:2929/BusinessObjectService.svc?wsdl" />
不理想,但它让我发现这项服务。然后我生成的客户端配置文件与您的相同,除了......
其次,我有messageEncoding="Text"
而不是messageEncoding="Mtom"
尝试将messagingEncoding更改为Text。您没有在服务器端指定它应该是Mtom,所以我不明白为什么它在客户端生成为Mtom。
除了这两个问题,我的配置与您的配置相同,并且运行没有问题。我不确定我发现的第二个问题是一个真正的问题(我无法看到元数据交换如何给出错误的消息编码),但第一个问题是阻止服务在我身边运行
答案 1 :(得分:0)
我收到的错误与所描述的错误几乎相同。但是我的错误是503,我在外部服务器上调用了一个Web服务。
当我从一个独立应用程序调用该服务时,我没有遇到任何问题,但是当我从SharePoint中的Web部件调用该服务时,它失败了。
对我有用的解决方案,没有任何进一步的解释,因为我还没有真正深入研究它的工作原理(如果你知道的话,请赐教:) :)
对我有用的第一个解决方案是使用我自己的域帐户而不是SPWebApplication使用的应用程序池的服务帐户。
第二解决方案是将服务绑定属性UseDefaultWebProxy设置为false
UseDefaultWebProxy = false
当然,这些解决方案取决于您的代理设置和用户设置。我的代理设置被设置为绕过我正在呼叫的服务的代理,所以我怀疑代理设置(在此配置:IE-> Internet选项 - >连接 - > LAN设置)不适用于服务帐户,但仅限于登录用户。到目前为止,这是我将要进行更多调查的内容。
编辑1: 嗯。这实际上没有带来任何新的东西,我用psexec查看我的代理设置作为服务帐户(netsh-&gt; winhttp-&gt;显示代理),看起来是正确的,所以我不认为这可能是问题。
编辑2: 最终解决方案,所以问题是我的SP网络应用程序没有使用我在IE中设置的代理设置,当应用程序池在服务帐户的上下文中运行时,我使用了我的用户帐户对于应用程序池我没有问题,并使用IE中的代理设置。经过一番调查后,似乎我可以在web.config中为我的SPWebApplication定义代理设置,我选择了只是禁用代理
<system.net>
<defaultProxy enabled="false" />
</system.net>