Импорт метаданных веб-сервиса ASMX к Конечной точке WCF

Я интересуюсь исполнением роли известной Web Services and Wcf Services в целях интеграционного теста. С этой целью я хотел бы получить сервисные метаданные, автоматически сгенерировать сервисные тупики и сервисные тупики хоста в саморазмещенной среде.

После этой статьи здесь, я могу получить удаленные Сервисные метаданные Wcf и генерировать контракты. Однако я испытываю некоторые затруднения при выполнении того же для удаленных веб-сервисов Asmx.

У меня есть ряд решений mickey-мыши для проверки этого.

Мое решение Asmx содержит значение по умолчанию "Привет Мировой" веб-сервис, найденный ниже

[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 содержит значение по умолчанию "Привет Мировой" сервис, также найденный ниже

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

Наконец, небольшой console-that-could похож

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 contracts = 
            importer.ImportAllContracts();
    }
}

Мне кажется, что я должен смочь вытянуть Wsdl от известного веб-сервиса Asmx и генерировать контракты [и из контрактов для кодирования], но, может казаться, не искажаю предыдущий образец, чтобы сделать так. Любая справка очень ценилась бы,

Спасибо!


Примечание: ошибка, сгенерированная при вызове MetadataSet metaSet = mexClient.GetMetadata(); выше a System.InvalidOperationException с сообщением

Метаданные содержат ссылку, которая не может быть разрешена: 'http://localhost:1803/SimpleAsmxService.asmx?WSDL'

С a System.InvalidOperationException внутреннее исключение с сообщением



    
        Sender
    
    
        
System.Web.Services.Protocols.SoapException: Unable to handle request without a valid action parameter. Please supply a valid soap action.
   at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()
   at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
   at System.Web.Services.Protocols.SoapServerProtocol.Initialize()
   at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response)
   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
        
    

6
задан John Saunders 21 February 2010 в 23:09
поделиться

1 ответ

Чтобы заставить его работать с веб-службой ASMX, нужно указать MetadataExchangeClientMode

...
MetadataExchangeClient mexClient = 
    new MetadataExchangeClient (new Uri(), MetadataExchangeClientMode.HttpGet);
...

с помощью MetadataExchangeClientMode . HttpGet для ваших служб ASMX и MetadataExchangeClientMode . MetadataExchange для ваших служб WCF.

6
ответ дан 17 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: