次のガイドラインに従って、 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 経由でデータを提供してくれることに非常に満足しているのに、認証エラーが発生するのは奇妙だと思います。
そこで、これらのメソッドが実際に水面下で何をしているのかよくわからないため、期待よりも希望に満ちたものに変更しようとしましたが、エラーが発生しますWebHttpBinding
。BasicHttpBinding
「http://MyServer:8443/TestService/」のエンドポイントには、None MessageVersion のバインディングがありません。'System.ServiceModel.Description.WebHttpBehavior' は、WebHttpBinding または同様のバインディングでの使用のみを目的としています。