次のような単一の Web メソッドを持つ .NET 3.5 Web サービスがあります。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
using System;
using System.Collections.Generic;
using System.Web.Services;
namespace Webservice1
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class WebService1 : WebService
{
[WebMethod]
public List<Model.Person> HelloWorld()
{
var person1 = new Model.Person { FirstName = "Champa", LastName = "Chameli", TimeSpan = new TimeSpan(12,10,9,8)};
var person2 = new Model.Person { FirstName = "Shamu", LastName = "Ramu", TimeSpan = new TimeSpan(12,10,9,8) };
var persons = new List<Model.Person> { person1, person2 };
return persons;
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
using System.Runtime.Serialization;
namespace Model
{
[DataContract]
public class Person
{
[DataMember]
public string FirstName{ get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public System.TimeSpan TimeSpan { get; set; }
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Person クラスは共通の .NET 3.5 アセンブリで定義されます。このアセンブリは、サービス リファレンス (.NET 互換 Web リファレンスではない) を介して Web サービスを呼び出す .NET 3.5 アプリケーションでも (プロジェクト リファレンスとして) 利用できます。
問題は、サービス参照名前空間に、自動生成された独自の Person の実装が含まれていることです。そのため、プロキシ SOAP クライアントで使用可能な、自動生成された Service Reference メソッドには、次の署名があります。
public WebApplication1.WebServiceReference1.Person[] HelloWorld()
また、dataContractOnly オプションを指定して svcutil コマンドを使用しようとしましたが、エラーが発生しました
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\svcutil" http:///CrossfirePortalServices/Leasing/WebService1.asmx /o:"C:\temp\WebApplication1\WebApplication1\WebService1.cs" / s /tcv:Version35 /r:"c:\temp\WebApplication1\Model\bin\Debug\Model.dll" /language:C# /n:*,RPCommonClasses.Services.WebService1 /dataContractOnly
エラー: 「http:///CrossfirePortalServices/Leasing/WebService1.asmx」から読み取った入力は、他のオプションと矛盾しています。さらにヘルプが必要な場合は、「svcutil /?」と入力してください。
私は、Model ドメインのさまざまなタイプをリクエスト用に ServiceReference ドメインのさまざまなタイプに変換したり、その逆を応答用に変換したりするのではなく、フレームワーク全体で Model ドメインを使用できるソリューションを見つけたいと思っています。
また、IT 部門が反対しているため、asmx Web サービスを WCF に変更することはできません。このタスクを達成する方法について何か提案はありますか?