.NET 3.5 ASMX Web服务 - 通过.NET 3.5服务参考调用 - 公共类重用

时间:2012-08-31 21:19:48

标签: asp.net .net web-services asmx svcutil.exe

我有一个.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 3.5应用程序(作为项目引用),该应用程序通过服务引用(不是.NET兼容性Web引用)调用Web服务。 / p>

问题是服务引用命名空间包含自己的,自动生成的Person实现。因此,代理SOAP客户端上可用的自动生成的服务引用方法具有以下签名:

public WebApplication1.WebServiceReference1.Person[] HelloWorld()

我也尝试过使用带有dataContractOnly选项的svcutil命令,但是我收到了错误

  

&#34; C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bin \ svcutil&#34;   HTTP:///CrossfirePortalServices/Leasing/WebService1.asmx   /o:"C:\temp\WebApplication1\WebApplication1\WebService1.cs" /秒   / tcv:Version35 /r:"c:\temp\WebApplication1\Model\bin\Debug\Model.dll"   / language:C#/ n:*,RPCommonClasses.Services.WebService1   / dataContractOnly

     

错误:读取的输入   &#39; HTTP:///CrossfirePortalServices/Leasing/WebService1.asmx'   与其他选项不一致。如果您需要更多帮助,请键入   &#34; svcutil /?&#34;

我很想找到一个解决方案,我可以在整个框架中使用Model域,而不必将Model域中的不同类型转换为ServiceReference域中的不同类型以获取请求,反之亦然。 p>

此外,我们无法将asmx webservices更改为WCF,因为我们的IT部门反对它。关于如何完成这项任务的任何建议?

1 个答案:

答案 0 :(得分:0)

有好消息和坏消息。好消息是它有可能并得到官方支持。坏消息是它相当复杂。

请参阅此MSDN文章,以获取Web引用之间共享类库的示例。这同样适用于您的方案。

http://msdn.microsoft.com/en-us/library/Aa480505.aspx