2

ソリューションにWindowsフォームプロジェクトとWebサービスプロジェクトがあり、Webサービスを呼び出して、結果として顧客オブジェクトを返そうとしています。問題は、returnオブジェクトを受信しようとすると、変換できないというエラーが発生することです。たとえば、これが私のWebサービスの署名です。

Public Function GetDriverByID(ByVal DriverID As Integer) As Driver

そして、これが私がそれを呼び出すために使用しているコードです:

    Dim d As Driver = mywebserviceinstance.GetDriverByID(1)

しかし、このコンパイル時エラーが発生します(wsDriversは、フォームプロジェクトに追加したWeb参照の名前です):「ProjectNamespace.Common.wsDrivers.Driver型の値をProjectNamespace.Common.Driverに変換できません」

この「共通」名前空間にはDriverクラスが含まれていますが、Webサービスからの戻りクラスが単なる一般的な「Driver」ではなく「wsDrivers.Driver」である理由がわかりません。変換できません。それを元に戻します。このタイプの不一致に対処する方法を知っている人はいますか?

編集:説明をありがとう-これは実際にそれが何をしているのかを明らかにします。ただし、プロキシの代わりに実際の型を使用するように強制できる方法はありますか(または、「実際の」インスタンスと「プロキシ」インスタンスの間で変換する方法はありますか)、または有線で送信する前にプロパティをシリアル化してから、戻り値を手動で逆シリアル化しますか?

4

2 に答える 2

2

これは実際にはかなり一般的です。何が起こっているのかというと、WebサービスはWebサービスで使用されるすべてのタイプの定義を定義しています。そのWebサービスへの参照を追加すると、名前空間のサブ名前空間にプロキシタイプが自動生成されます。これは、Webサービスを呼び出したときに返されるものです。

ただし、おそらく、同じタイプを含むWebサービスが個別に実行するのと同じライブラリを参照している可能性があります。それはあなたがドライバーを薄暗くするときに期待されるタイプです。そのため、不一致があります。

于 2008-10-10T21:08:17.660 に答える
0

VB.NET または C# プロジェクトの Web サービス参照は、任意の種類の Web サービスを参照でき、ASP.NET によって提供されるものに限定されません。そのため、Visual Studio は Web サービスから取得できるオブジェクトごとにプロキシ クラスを作成します。

于 2008-10-10T21:06:09.847 に答える