5

EclipseでJavaを使用して単純なWSDLWebサービスを作成しました。サービスのJavaコードプロトタイプは次のとおりです。

public static String vriteAnnouncement(String title, String body){
    ...
}

Microsoftツールを使用してこのWSDLサービスのプロキシクラスを生成しwsdl.exe、Developer Command Prompt VisualStudio2012の次のコマンドを使用してdllにしました。

wsdl /l:CS /protocol:SOAP WriteAnnouncement.wsdl
csc /t:library /r:System.Web.Services.dll /r:System.Xml.dll WriteAnnouncementService.cs

Windows 8ストアアプリケーションで、このdllへの参照を追加し、MainPage.xaml.csに次のコードを追加しました。

WriteAnnouncementService was = new WriteAnnouncementService();

アプリケーションを実行しようとすると、次のエラーが発生しました。

タイプ'System.Web.Services.Protocols.SoapHttpClientProtocol'は、参照されていないアセンブリで定義されています。
アセンブリ'System.Web.Services、Version = 4.0.0.0、Culture = neutral、PublicKeyToken=b03f5f7f11d50a3a'への参照を追加する必要があります。
C:\ Users ...\MainPage.xaml.cs行27列13

次に、System.Web.Serviceへの参照を追加し、アプリケーションを再構築しました。今、私は次のエラーを受け取っています:

タイプ'System.Web.Services.Protocols.WebClientProtocol'によって参照されるアセンブリ'System、Version = 4.0.0.0、Culture = neutral、PublicKeyToken=b77a5c561934e089'の基本クラスまたはインターフェイス'System.ComponentModel.Component'を解決できませんでしたc :\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Web.Services.dll

4

2 に答える 2

2

wsdl.exeでプロキシを生成する理由はありますか?

私はbclのWindows8ストアサブセットの専門家ではありませんが、生成されたプロキシは新しいWebサービスサブシステムをサポートしているため、svcutilを使用して既知のwsdlからプロキシを生成することをお勧めします。生成されたプロキシは、基本クラスライブラリのさまざまなクラスから継承します。私にとっては、新しいサブシステムが制約のある環境でシームレスに機能する可能性が高くなります。

于 2013-01-06T20:16:19.923 に答える
1

「サービス参照の追加」を介してサービスの畏敬の念を追加すると、問題が解決しました。 ここに画像の説明を入力してください

ここに画像の説明を入力してください

しかし、生成されたreference.csファイルには別の問題があります。あいまいな呼び出しについては複数の誤りがあります。

次のメソッドまたはプロパティ間で呼び出しがあいまいです:'GyteKiosk.ServiceReference1.WriteAnnouncementClient.ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint、System.ServiceModel.Description.ClientCredentials)'と'GyteKiosk.ServiceReference1.WriteAnnouncementClient.ConfigureEndpoint(System.ServiceModel .Description.ServiceEndpoint、System.ServiceModel.Description.ClientCredentials)'Reference.cs 115 13

アップデート!

あいまいなコールプロムレムも解決しました。あいまいな呼び出しのステップバイステップのソリューション:

  1. 私のサービスクラス名は「WriteAnnouncement」で、サービスメソッド名は「vriteAnnouncement」でした。メソッド名を「書き込み」のみに変更しました。
  2. テストクライアントなしでEclipseでWebサービスを再作成しました。
  3. WSDLファイルを取得し、プロジェクトフォルダーに配置しました。
  4. 以前に追加されたサービス参照と再追加されたサービス参照を削除しました。「WAServRef」としてサービス参照にnemeを与えました

プロジェクトでサービスを使用するには:

  1. using GyteKiosk.WAServRef;でサービスを使用するページコードに追加します。
  2. 使用したい場所でサービスに電話してください。

        WriteAnnouncementClient wac = new WriteAnnouncementClient();
        Task<GyteKiosk.WAServRef.writeResponse> wres = wac.writeAsync("Gyte Kiosk", "Gyte Kiosk");
        String result = wres.Result.Body.writeReturn;
        this.pageTitle.Text = result;
    
于 2013-01-07T14:29:46.133 に答える