1

私は次のような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 

IAServiceSoapインターフェースは次のようになります

    [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;
        }
    }
}

問題は、このようなものを基本的なバインディングを使用してWCFWebサービスに移動する方法です。

4

1 に答える 1

2

コンソールアプリケーションを使用してWCFに実装した場合、サービスがどのようになるかをモックアップしました。.NET 4.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();
        }
    }
}
于 2012-08-23T15:14:49.550 に答える