C# 将ASMX服务移动到WCF基本绑定服务
我的asmx服务如下所示: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
[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
中的中。但是我如何设置所有这些名称空间呢?您可以在属性中设置名称空间,请参阅