1

次のガイドラインに従って、 Restful WCF サービスをセットアップ中です。

手順は問題なく、テスト バージョンが正常に実行され、ブラウザに XML 結果が表示されました (この場合のPersonレコード)。

私たちが抱えている問題の 1 つは、作成者がブラウザーで XML を表示する以上のことを私たちに教えてくれないことです。

Person結果が XML 形式で表示されると、そのデータをクラスに逆シリアル化できるクライアントを簡単に作成できると思うでしょう。

実際、それほど簡単ではありません。バインディングとエンドポイントについて頭をかきむしることがたくさんあります...適切に習得したかどうかはわかりません. とにかく、しばらくして、途中で意味を成すコードサンプルを見つけて、これをノックアップしました:

Dim persons As Persons
Using host As New WebServiceHost(GetType(MyTestService), New Uri("http://MyServer:8443/TestService/"))
    host.AddServiceEndpoint(GetType(IMyTestService), New BasicHttpBinding(), "")
    host.Open()

    Using cf As New ChannelFactory(Of IMyTestService)(New BasicHttpBinding(), "http://MyServer:8443/TestService/")
        cf.Endpoint.Behaviors.Add(New WebHttpBehavior())
        Dim channel As IMyTestService = cf.CreateChannel()


        persons = channel.GetPersons
    End Using

    MsgBox(persons.Count)

End Using

唯一の問題は、次のpersons = channel.GetPersonsエラーで失敗していることです。

HTTP 要求は、クライアント認証スキーム「匿名」では許可されていません。サーバーから受信した認証ヘッダーは「Negotiate,NTLM」でした。

現在、サーバーが IE または Chrome 経由でデータを提供してくれることに非常に満足しているのに、認証エラーが発生するのは奇妙だと思います。

そこで、これらのメソッドが実際に水面下で何をしているのかよくわからないため、期待よりも希望に満ちたものに変更しようとしましたが、エラーが発生しますWebHttpBindingBasicHttpBinding

「http://MyServer:8443/TestService/」のエンドポイントには、None MessageVersion のバインディングがありません。'System.ServiceModel.Description.WebHttpBehavior' は、WebHttpBinding または同様のバインディングでの使用のみを目的としています。

4

1 に答える 1

1

うーん...あなたが示しているそのコードサンプルは、SOAPバインディングであり、RESTとは何の関係もないを使用するWCFサービスのサーバー側になります...それは間違いなく、WCF RESTサービスに対するクライアントのコードではありません!basicHttpBinding

WCF REST サービスが稼働していると仮定すると、クライアントは次のようにかなり単純になります。

// create a new web request to query your service
WebRequest request = WebRequest.Create("http://MyServer:8443/TestService/");

// get the response
WebResponse response = request.GetResponse();

// examine some properties of the response
long length = response.ContentLength;
string contentType = response.ContentType;

// fetch the XML (or JSON) contents of the response
string content = new StreamReader(response.GetResponseStream()).ReadToEnd();
于 2012-08-05T10:16:12.380 に答える