将ASMX Web服务元数据导入WCF端点

将ASMX Web服务元数据导入WCF端点,wcf,web-services,asmx,metadata,Wcf,Web Services,Asmx,Metadata,我对模拟著名的Web服务和Wcf服务进行集成测试感兴趣。为此,我希望在自托管环境中捕获服务元数据、自动生成服务存根和主机服务存根 接下来,我能够获取远程Wcf服务元数据并生成合同。但是,对于远程Asmx Web服务,我在执行相同的操作时遇到了一些困难 我有一套米老鼠的解决方案来审查这个 我的Asmx解决方案包含一个默认的“Hello World”web服务,如下所示 [WebService(Namespace = "http://tempuri.org/")] [WebServiceBindin

我对模拟著名的Web服务和Wcf服务进行集成测试感兴趣。为此,我希望在自托管环境中捕获服务元数据、自动生成服务存根和主机服务存根

接下来,我能够获取远程Wcf服务元数据并生成合同。但是,对于远程Asmx Web服务,我在执行相同的操作时遇到了一些困难

我有一套米老鼠的解决方案来审查这个

我的Asmx解决方案包含一个默认的“Hello World”web服务,如下所示

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class SimpleAsmxService : System.Web.Services.WebService
{
    [WebMethod]
    public string HelloWorld () { return "Hello World"; }
}
我的Wcf解决方案包含一个默认的“Hello World”服务,也可以在下面找到

[ServiceContract]
public interface ISimpleWcfService
{
    [OperationContract]
    string GetData(int value);

    [OperationContract]
    CompositeType GetDataUsingDataContract(CompositeType composite);
}

[DataContract]
public class CompositeType
{
    [DataMember]
    public bool BoolValue { get; set; }

    [DataMember]
    public string StringValue { get; set; }
}

public class SimpleWcfService : ISimpleWcfService
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }

    public CompositeType GetDataUsingDataContract(CompositeType composite)
    {
        if (composite.BoolValue)
        {
            composite.StringValue += "Suffix";
        }
        return composite;
    }
}
最后,这个小控制台看起来像

class Program
{
    public const string UrlWcf = 
        "http://localhost:8731/Design_Time_Addresses/SimpleWcfService/mex";
    public const string UrlAsmx = 
        "http://localhost:1803/SimpleAsmxService.asmx?WSDL";

    static void Main(string[] args)
    {
        EndpointAddress mexAddress = new EndpointAddress (UrlWcf);
        MetadataExchangeClient mexClient = 
            new MetadataExchangeClient (mexAddress);
        mexClient.ResolveMetadataReferences = true;

        // NOTE: blows up if we use UrlAsmx
        MetadataSet metaSet = mexClient.GetMetadata ();

        WsdlImporter importer = new WsdlImporter (metaSet);
        Collection<ContractDescription> contracts = 
            importer.ImportAllContracts();
    }
}

让它与ASMX web服务一起工作的方法是指定MetadataExchangeClientMode

...
MetadataExchangeClient mexClient = 
    new MetadataExchangeClient (new Uri(), MetadataExchangeClientMode.HttpGet);
...
为您的ASMX服务使用MetadataExchangeClientMode.HttpGet
和MetadataExchangeClientMode。MetadataExchange用于您的WCF服务。

@johnny-不客气。。。哦,孩子!我的第一笔赏金!
...
MetadataExchangeClient mexClient = 
    new MetadataExchangeClient (new Uri(), MetadataExchangeClientMode.HttpGet);
...