0

IIS でホストされている WCF サービスを使用する必要がある win8 アプリを開発していますが、そうはなりません... 注: Web サービスは問題なく動作します。VS2012 の WCF テスト クライアントでテストしました。コードは次のとおりです。

IService.cs:

using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

[ServiceContract]
public interface IService
{

[OperationContract]
string SitePredmeti();

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Xml)]
List<Profesor> SiteProfesori();
}

私は2つのメソッドを作成しました.1つはxmlを返し、もう1つはjsonを返すので、どちらが機能するかをテストできます。WS が json を返すか xml を返すかは関係ありません。アプリでどちらでも作業できます。

私は変更なしでwin8のhtml5/JSアプリにデフォルトのSPLIT APP TEMPLATEを使用しています。今のところ、wcf サービスを使用する必要があるだけです。後でデータ テンプレートを処理します。

私のiisがホストするwcfへのURL:

http://localhost/InformatorWS/Service.svc

これが私がこれまでに試したことです:

var baseURl = "http://localhost/InformatorWS/Service.svc/SitePredmeti/";
var url  = baseURl+Number1.value+"/"+Number2.value;  
WinJS.xhr({ url: url  }).then(function  (r)  {
var result  = JSON.parse(r.responseText);
ResultSpan.innerHTML  = result;  });

ここで得られるエラーは次のとおりです。

{"exception":null,"error":{},"promise":{"_oncancel":null,"_nextState":null,"_state":>{"name":"error","done":null ,"then":null},"_listeners":null,"_value":{},"_isException":false,"_errorId":2},"id":2}

次に、jquery ajax経由で呼び出してみました:

$(document).ready(function () {
        jQuery.support.cors = true;
        //Calling WCF Service using jQuery ajax method
        $.ajax({
            type: "GET",
            async: "false",
            url: "http://localhost/InformatorWS/Service.svc/SitePredmeti",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            processData: true,
            success: function (result) {
                //AjaxSucceeded(result);
                alert('ok')
            },
            error: alert('ne ok')
        });
    });

そしてjqueryをリンクすると

<script type="text/javascript" src="js/jquery-ui-1.8.9.custom.min.js"></script>
<script type="text/javascript" src="js/jquery-1.4.3.js"></script>

私は3つの例外があります:

ms-appx://66b782f9-8814-4b8e-a2e3-d6e73893690a/js/jquery-ui-1.8.9.custom.min.js 0x800a1391 の行 10、列 2 で未処理の例外 - JavaScript ランタイム エラー: 'jQuery' は未定義

(およびこれらのうちの 2 つ - 成功とエラーの 2 つのアラート)

ms-appx://66b782f9-8814-4b8e-a2e3-d6e73893690a/js/default.js 0x800a1391 の 8 行目、9 列目の未処理の例外 - JavaScript ランタイム エラー: 'アラート' は未定義です

誰かが私が間違っていることを知っていますか? または、IIS でホストされている WCF サービスを使用する方法を知っている人はいますか?

事前にどうもありがとうございました。

4

1 に答える 1

0

ここでいくつかの問題が発生する可能性があります。WCFTestClient と JavaScript で使用するには、異なるエンドポイントが必要です。1 つ目は SOAP エンドポイントが必要ですが、2 つ目は非 SOAP (別名 REST) エンドポイントが必要です。質問で言及しなかったので、エンドポイントが 1 つしかないと仮定しています。WCFTestClient が機能するため、これは SOAP エンドポイントであり、JavaScript 1では機能しません。この場合は、新しい Web エンドポイントをサービスに追加します (または既存のものを置き換えます) 2 . Web エンドポイントの詳細については、MSDN のWCF Web HTTP プログラミング モデルドキュメントを参照してください。


1理論的には、JavaScript を使用して SOAP エンドポイントを呼び出すことができます (特に、エンドポイントが のような単純なバインディングを使用している場合BasicHttpBinding)。ただし、送信するXMLペイロードを作成し、SOAP 仕様に従ってフォーマットする必要があります。送信して結果として期待する JSON ペイロードではありません。

2そして、それを行う場合 - SOAP 以外のエンドポイントが 1 つしかない場合、WCF テスト クライアントはそれを使用できなくなりますが、サービス WSDL を消費して通信しようとするため、これは想定内のことです。

于 2012-10-20T21:28:24.997 に答える