一点背景知识。我曾与ASMX和PageMethods合作,但到目前为止还没有WCF。我正在开发Win 7 Pro,安装了Windows Communication Foundation HTTP Activation以及安装了Windows Communication Foundation HTTP Non-Activation。我还部署到也在我的计算机上运行的SharePoint Foundation 2010。
我正在为正在访问非SharePoint数据的SharePoint开发自定义Web服务。我发现了几篇关于在SharePoint中创建WCF服务的文章。我按照这个中的说明http://answers.oreilly.com/topic/1404-how-to-customize-wcf-services-in-sharepoint-2010
我可以加载MEX,例如http://mySite.com/Services/MyService.svc/MEX,但如果我转到http://mySite.com/Services/MyService.svc,我会收到HTTP 400错误请求。
查看事件查看器日志,没有任何与此错误相关的信息。 IIS日志仅显示服务的GET。
我认为它未正确部署或存在一些权限问题。
答案 0 :(得分:7)
我遇到了与开发REST服务时描述的问题相同的问题。解决方案是将Factory更改为用于REST服务的 MultipleBaseAddressWebServiceHostFactory ,而不是用于 MultipleBaseAddressBasicHttpBindingServiceHostFactory 的工厂SOAP服务。
例如在.svc文件中:
<%@ ServiceHost Language="C#" Debug="true"
Service="MyProject.WCFService1, $SharePoint.Project.AssemblyFullName$"
CodeBehind="WCFService1.svc.cs"
Factory="Microsoft.SharePoint.Client.Services.MultipleBaseAddressWebServiceHostFactory, Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
以下是您可以使用的不同类型工厂的描述,provided by Andy Kinnear:
<强> MultipleBaseAddressBasicHttpBindingServiceHostFactory 强>
用于 SOAP服务。必须使用基本的HTTP绑定,它基于基本的HTTP绑定为服务创建端点。
<强> MultipleBaseAddressWebServiceHostFactory 强>
用于 REST服务。服务工厂使用Web绑定创建端点。
MultipleBaseAddressDataServiceHostFactory
用于 ADO.NET数据服务。可以使用数据服务主机工厂。
答案 1 :(得分:0)
.config文件(或等效代码)中有httpGetEnabled
吗?
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</behaviors>
</serviceBehaviors>
</system.serviceModel>
答案 2 :(得分:0)
据我所知,这不是问题(当你访问.svc时获取HTTP 400但访问/ mex时没有获得)。
我遇到了同样的问题,我的SharePoint WCF服务正常运行。尝试从一个简单的控制台应用程序调用您的服务,它将工作,例如
SomeServiceClient proxy = new SomeServiceClient(new BasicHttpBinding(), new EndpointAddress("http://server/_vti_bin/YourService.svc"));
答案 3 :(得分:0)
只是建议我建议您使用CKSDevs Tools它有许多标准共享点元素的模板,包括WCF服务。
而且我也没有看到这里的问题,你说端点的工作正常。你期望在/MyService.svc上看到什么?你很简单,不会将任何查询传递给服务,因此它不知道该做什么并抛出400。
答案 4 :(得分:0)