2011-11-16 66 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

我很高興聽到! :) –