C# 将ASMX服务移动到WCF基本绑定服务

C# 将ASMX服务移动到WCF基本绑定服务,c#,.net,wcf,web-services,C#,.net,Wcf,Web Services,我的asmx服务如下所示: [WebService(Namespace = "http://www.zzz.com/ema/xml/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class AService : System.Web.Services.WebService, IAServiceSoap iSe

我的asmx服务如下所示:

[WebService(Namespace = "http://www.zzz.com/ema/xml/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class AService : System.Web.Services.WebService, IAServiceSoap 
iServiceSoap接口如下所示

    [WebService(Namespace = "http://www.zzz.com/ema/xml/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class AService : System.Web.Services.WebService, IAServiceSoap

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Web.Services.WebServiceBindingAttribute(Name = "AsmbServiceSoap", Namespace = "http://www.zzz.com/ema/xml/")]
[System.Xml.Serialization.SoapIncludeAttribute(typeof(SOAPXmlEventEntry))]
public interface IAsmbServiceSoap {

    /// <remarks/>
    [System.Web.Services.WebMethodAttribute()]
    [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://www.zzz.com/ema/xml/Login", RequestNamespace="http://www.zzz.com/ema/xml/", ResponseNamespace="http://www.zzz.com/ema/xml/")]
    void Login(string url, string id, int ClientType, out int ClientID);


}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.zzz.com/ema/xml/")]
public partial class SOAPXmlEventEntry {

    private int datatypeField;

    private string dataField;

    private int idField;

    /// <remarks/>
    public int datatype {
        get {
            return this.datatypeField;
        }
        set {
            this.datatypeField = value;
        }
    }

    /// <remarks/>
    public string data {
        get {
            return this.dataField;
        }
        set {
            this.dataField = value;
        }
    }

    /// <remarks/>
    public int id {
        get {
            return this.idField;
        }
        set {
            this.idField = value;
        }
    }
}
[WebService(命名空间=”http://www.zzz.com/ema/xml/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
公共类AService:System.Web.Services.WebService、iServicesOAP
/// 
[System.CodeDom.Compiler.GeneratedCodeAttribute(“wsdl”,“2.0.50727.42”)]
[System.Web.Services.WebServiceBindingAttribute(Name=“AsmbServiceSoap”,命名空间=”http://www.zzz.com/ema/xml/")]
[System.Xml.Serialization.SoapIncludeAttribute(typeof(SOAPXmlEventEntry))]
公共接口IAsmbServiceSoap{
/// 
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapRpcMethodAttribute(“http://www.zzz.com/ema/xml/Login,RequestNamespace=http://www.zzz.com/ema/xml/,ResponseNamespace=http://www.zzz.com/ema/xml/")]
无效登录(字符串url、字符串id、int-ClientType、out-int-ClientID);
}
/// 
[System.CodeDom.Compiler.GeneratedCodeAttribute(“wsdl”,“2.0.50727.42”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.SoapTypeAttribute(命名空间=”http://www.zzz.com/ema/xml/")]
公共部分类SOAPXmlEventEntry{
私有int数据类型字段;
私有字符串数据字段;
私人国际机场;
/// 
公共int数据类型{
得到{
返回this.datatypeField;
}
设置{
this.datatypeField=值;
}
}
/// 
公共字符串数据{
得到{
返回此.dataField;
}
设置{
this.dataField=值;
}
}
/// 
公共整数id{
得到{
返回此.idField;
}
设置{
this.idField=值;
}
}
}

问题是我如何使用基本绑定将类似于此的内容移动到WCF webservice?

我模拟了如果使用控制台应用程序在WCF中实现您的服务会是什么样子。只要您使用.NET4.0,WCF的简化配置将负责为您的服务主机创建端点。由于主机的基本url基于http协议,“basicHttpBinding”将用作默认绑定

对于客户端代码,您只需使用用于创建ServiceHost的URL添加服务引用。在本例中,我添加了一个服务引用,并将其放在名称空间“AService”中

主机代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace WcfHost
{
    [ServiceContract(Namespace="http://www.zzz.com/ema/xml/")]
    public interface IAsmbServiceSoap
    {
        [OperationContract]
        void Login(string url, string id, int ClientType, out int ClientID); 
    }

    public class AService : IAsmbServiceSoap
    {
        #region IAsmbServiceSoap Members

        public void Login(string url, string id, int ClientType, out int ClientID) {
            ClientID = 100;
            // do work
        }

        #endregion
    }


    class Program
    {
        static void Main(string[] args) {

            ServiceHost serviceHost = new ServiceHost(typeof(AService), new Uri("http://localhost:8000/AService"));

            ServiceMetadataBehavior metadataBehavior = new ServiceMetadataBehavior() { HttpGetEnabled = true };
            serviceHost.Description.Behaviors.Add(metadataBehavior);

            serviceHost.Open();

            Console.WriteLine("Open for communication.  Press ENTER to close.");
            Console.ReadLine();

            serviceHost.Close();
        }
    }
}
示例客户端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WcfClient
{

    class Program
    {
        static void Main(string[] args) {

            AService.AsmbServiceSoapClient client = new AService.AsmbServiceSoapClient();

            int clientId = client.Login("http://www.someurl.com", "test", 1);

            Console.WriteLine(clientId);
            Console.ReadLine();
        }
    }
}

对于初学者,可以使用不同的属性集:
ServiceContract
OperationContract
。现在,您的配置可以主要位于
app.config
中的中。但是我如何设置所有这些名称空间呢?您可以在属性中设置名称空间,请参阅