SVC в SharePoint Foundation 2010 дает HTTP 400: неверный запрос - PullRequest
3 голосов
/ 16 ноября 2011

Немного фона. Я работал с ASMX и PageMethods, но пока без WCF. Я занимаюсь разработкой Win 7 Pro с установленной активацией Windows Communication Foundation HTTP, а также с установкой неактивации Windows Communication Foundation HTTP. Я также внедряю в SharePoint Foundation 2010, который также работает на моем компьютере.

Я разрабатываю настраиваемый веб-сервис для SharePoint, который обращается к данным не из SharePoint. Я нашел несколько статей о создании службы WCF в SharePoint. Я следовал инструкциям в этом, 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 Bad Request.

В журналах просмотра событий нет ничего, связанного с этой ошибкой. Журналы IIS показывают только GET для службы.

Я предполагаю, что он либо неправильно развернут, либо есть проблема с разрешениями.

Ответы [ 5 ]

7 голосов
/ 19 июня 2013

У меня возникла та же проблема, что вы описали при разработке службы 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" %>

Вот описание различных типов фабрик, которые вы можете использовать, предоставлено Энди Киннером :

  • MultipleBaseAddressBasicHttpBindingServiceHostFactory

    Используется для SOAP-сервисов . Необходимо использовать базовую привязку HTTP, которая создает конечные точки для службы на основе базовой привязки HTTP.

  • MultipleBaseAddressWebServiceHostFactory

    Используется для REST услуг . Фабрика обслуживания создает конечные точки с веб-привязками.

  • MultipleBaseAddressDataServiceHostFactory

    Используется для Служб данных ADO.NET . Можно использовать фабрику хоста службы данных.

0 голосов
/ 17 ноября 2011

Попробуйте посмотреть запрос на обслуживание в Fiddler .Также попробуйте посмотреть, работает ли какой-либо из приведенных ниже URL-адресов:

http://server/_vti_bin/MyService.svc/negotiate

http://server/_vti_bin/MyService.svc/ntlm

http://server/_vti_bin/MyService.svc/anonymous

0 голосов
/ 16 ноября 2011

Насколько я могу судить, это не проблема (получение HTTP 400 при посещении .svc, но не при посещении /mex).
У меня та же проблема, и мои службы SharePoint WCF работают правильно. Попробуйте позвонить в ваш сервис из простого консольного приложения, и оно будет работать, например,
SomeServiceClient proxy = new SomeServiceClient(new BasicHttpBinding(), new EndpointAddress("http://server/_vti_bin/YourService.svc"));

0 голосов
/ 17 ноября 2011

Просто для совета, я рекомендую вам использовать CKSDevs Tools в нем есть шаблоны для многих стандартных элементов sharepoint, включая службу WCF.

А также я не вижу здесь проблемы, вы говорите, что конечная точка работает правильно, это хорошо. Что вы ожидали увидеть на /MyService.svc? Вы просто не передаете какой-либо запрос службе, поэтому он не знает, что делать, и выбрасывает 400.

0 голосов
/ 16 ноября 2011

У вас есть httpGetEnabled в файле .config (или эквивалентный код)?

<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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...