2011-11-16 69 views
3

有点背景。我已经与ASMX和PageMethods合作过,但目前还没有WCF。我正在开发Win 7 Pro,并安装了Windows Communication Foundation HTTP激活,并安装了Windows Communication Foundation HTTP非激活。我还在部署到也在我的计算机上运行的SharePoint Foundation 2010。SharePoint Foundation 2010中的SVC提供HTTP 400:错误请求

我正在开发访问非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

带有SharePoint网站(不是SVC)的我的400在IIS中是不正确的绑定。 – PeterX

回答

0

在.config文件(或等效代码)中是否有httpGetEnabled

<system.serviceModel> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior> 
     <serviceMetadata httpGetEnabled="true"/> 
     </behavior> 
    </behaviors> 
    </serviceBehaviors> 
</system.serviceModel> 

参考:http://msdn.microsoft.com/en-us/library/system.servicemodel.description.servicemetadatabehavior.httpgetenabled.aspx

+0

他正在使用服务主机工厂,因此不需要在配置文件中添加任何配置 – Jomit

0

据我所知,这不是一个问题(当您访问的.svc但不能访问/ MEX时获得HTTP 400)。
我有同样的问题,我的SharePoint WCF服务工作正常。尝试从简单的控制台应用程序调用您的服务,它可以工作,例如
SomeServiceClient proxy = new SomeServiceClient(new BasicHttpBinding(), new EndpointAddress("http://server/_vti_bin/YourService.svc"));

+0

HTTP 400怎么没有问题? – nickytonline

0

只是建议我推荐你使用CKSDevs Tools它有许多标准的共享点元素包括WCF服务的模板。

而且我也没有在这里看到问题,你说端点工作正确,那很好。你期待在/MyService.svc看到什么?你简单的不通过任何查询服务,所以它不知道该怎么做,并抛出400.

+0

我打电话给一项服务,例如/MyService.svc/GetTreeNodeData,并仍然给了一个HTTP 400错误请求 – nickytonline

+0

@nickyt好的,你可以提供一些代码,请问你有一个WebGetAttribute在你的操作合同,即:[[WebGet(UriTemplate =“GetTreeNodeData”)]' – Alexander

7

我得到了同样的问题,因为你描述的开发REST服务时。解决的办法是改变工厂用来MultipleBaseAddressWebServiceHostFactory用于REST服务,而不是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数据服务。数据服务主机工厂可以使用。

+0

谢谢,这帮助了我很多。 –

+0

我很高兴听到! :) –