我有一个 .NET 3.5 Web 服务,它有一个看起来像这样的单一 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 客户端上可用的自动生成的服务引用方法具有以下签名:
public WebApplication1.WebServiceReference1.Person[] HelloWorld()
我还尝试将 svcutil 命令与 dataContractOnly 选项一起使用,但出现错误
"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 域,而不必将 Model 域中的不同类型转换为 ServiceReference 域中的不同类型来处理请求,反之亦然。
我们也不能将 asmx webservices 更改为 WCF,因为我们的 IT 部门反对它。关于如何完成这项任务的任何建议?