2

Я создал пользовательскую службу WCF в SharePoint 2010, которую я пытаюсь вызвать с помощью запроса JQuery Ajax. Моя служба пользовательских WCF моделируется на примере, приведенном здесь:Аутентификация пользовательской службы WCF в Sharepoint 2010

Ссылка: http://blog.sharepointbits.com/2010/04/custom-wcf-services-in-sharepoint-2010_17.html

выше метод дал мне службу WCF, я мог бы получить доступ из C# серверного кода и пользовательской формы InfoPath, однако, я не удалось получить ответ с помощью JQuery Ajax.

Я прочитал в другом месте в разделе Переполнение стека, чтобы использовать MultipleBaseAddressWebServiceHostFactory вместо MultipleBaseAddressBasicHttpBindingServiceHostFactory в качестве исходной статьи.

Ссылка: Sharepoint 2010 wcf service. call method with jquery

Это сработало, что позволило мне связаться (но не проверить подлинность) службы с помощью JQuery Ajax, однако,

а) Я больше не в состоянии перейти к http://[servername]/_vti_bin/Service.svc/mex и увидеть WSDL. Эта проблема означает, что мои формы InfoPath не могут подключиться к службе, потому что они ищут WSDL.

b) Несмотря на то, что запрос JQuery Ajax попадает в пользовательскую службу WCF, браузер запрашивает у меня проверку подлинности каждый раз, даже если запрос поступает из браузера пользователя, зарегистрированного в SharePoint.

Если кто знает, как исправить проблемы a) и b), я был бы очень благодарен. На самом деле не должно быть так сложно сделать сервис, который можно использовать из любого приложения.

+0

Если вы нашли решение, предоставьте его здесь как ответ. Я заинтересован. – Kyberias

ответ

1

После некоторого уклонения, я застрял с использованием MultipleBaseAddressBasicHttpBindingServiceHostFactory. Вместо того, чтобы пытаться связаться с WCF-сервисом через JSON, я создал функцию для создания SOAP-сообщения, отправки его в службу WCF и последующего анализа результата.

Интересно, что это, похоже, также решило мою проблему аутентификации, хотя я не знаю, почему.

Теперь услуга доступна из InfoPath и из JavaScript.

Для справки, сообщение SOAP к WCF из JavaScript должен выглядеть следующим образом:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">     
    <soap:Body> 
     <MethodName xmlns="http://tempuri.org/"> 
      <ParamName1>Value</ParamName1> 
      <ParamName2>Value</ParamName2> 
     </MethodName> 
    </soap:Body> 
</soap:Envelope> 

И JQuery, чтобы отправить его:

$.ajax({ 
    type: "POST", 
    url: url, 
    data: soapEnvelope, 
    timeout: timeOut, 
    contentType: "text/xml", 
    dataType: "xml", 
    beforeSend: function (xhr) { 
     xhr.setRequestHeader("SOAPAction", 'http://tempuri.org/' + methodPath); 
    }, 
    success: onSuccess, 
    error: onFailure 
}); 

Примечание: Самый простой способ узнать, что такое значение метода MethodPath должен состоять в том, чтобы посмотреть WSDL для вашего сервиса.

+0

Привет, у меня такая же проблема, не могли бы вы добавить некоторые подробности о том, как создать сообщение с мылом и как получить «MethodPath»? –

+1

Как я уже сказал в ответ, посмотрите WSDL вашего сервиса WCF. Найдите метод, который вы хотите вызвать, в элементе ''. Атрибут 'soapAction' элемента' '- это полный путь метода (включая часть tempuri). Что касается создания SOAP, я даю полный пример того, как он должен выглядеть. – MgSam

Смежные вопросы