2

SharePoint 2010でカスタムWCFサービスを作成しました。これは、JQueryAjaxリクエストを介して呼び出そうとしています。私のカスタムWCFサービスは、次の例をモデルにしています。

リンク: http: //blog.sharepointbits.com/2010/04/custom-wcf-services-in-sharepoint-2010_17.html

上記の方法では、C#サーバー側コードからアクセスできるWCFサービスとカスタムInfoPathフォームが提供されましたが、JQueryAjaxを使用して応答を取得できませんでした。

元の記事が示唆しているようMultipleBaseAddressWebServiceHostFactoryに、代わりに使用するためにStackOverflowの他の場所を読みました。MultipleBaseAddressBasicHttpBindingServiceHostFactory

リンク:Sharepoint2010wcfサービス。jqueryでメソッドを呼び出す

これは機能し、JQuery Ajaxを介してサービスに接続できました(ただし、認証はできませんでした)。

a) http://[servername]/_vti_bin/Service.svc/mexに移動してWSDLを表示できなくなりました。この問題は、InfoPathフォームがWSDLを検索するため、サービスに接続できないことを意味します。

b)JQuery Ajax要求がカスタムWCFサービスにヒットした場合でも、要求がSharePointにログインしているユーザーのブラウザーからのものであっても、ブラウザーは毎回認証を要求します。

誰かが問題を修正する方法を知っているならa)とb)私は非常に感謝するでしょう。どのアプリケーションからでも使用できるサービスを作成することは、それほど難しいことではありません。

4

1 に答える 1

1

少しいじくり回した後、私は使用に固執しましたMultipleBaseAddressBasicHttpBindingServiceHostFactory。JSONを介してWCFサービスに接続する代わりに、SOAPメッセージを作成し、それをWCFサービスに送信して、結果を解析する関数を作成しました。

興味深いことに、これで認証の問題も解決したようですが、理由はわかりません。

これで、サービスはInfoPathおよびJavaScriptから使用できるようになりました。

参考までに、JavaScriptからWCFへのSOAPメッセージは次のようになります。

<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を確認することです。

于 2012-06-08T13:50:23.467 に答える