2013-05-15 2 views
3

Вот как я начинаю свой веб-сервис:Как получить WSDL-файл из текущей службы?

try 
{ 
    //load the shedluer static constructor 
    ServiceHost svh = new ServiceHost(typeof(OrderExecutor)); 

    var tcpbinding = new NetTcpBinding(SecurityMode.None); 

    //remove limits on the max array size 
    var httpLocation = "http://" + address + ":1234"; 

    svh.AddServiceEndpoint(typeof(IOrderExecutor), new WSHttpBinding(SecurityMode.None), httpLocation); 

    ServiceMetadataBehavior smb = svh.Description.Behaviors.Find<ServiceMetadataBehavior>(); 

    if (smb == null) 
     smb = new ServiceMetadataBehavior(); 

    smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 
    svh.Description.Behaviors.Add(smb); 

    // Add MEX endpoint 

    svh.AddServiceEndpoint(
       ServiceMetadataBehavior.MexContractName, 
       MetadataExchangeBindings.CreateMexHttpBinding(), 
       httpLocation + "/mex" 
       ); 


    svh.Open(); 
    Console.WriteLine("Service mounted at {0}", httpLocation); 
    Console.WriteLine("Press Ctrl+c to exit"); 

    var re = new ManualResetEvent(false); 
    re.WaitOne(); 
    svh.Close(); 
} 
catch (Exception e) 
{ 
    Console.WriteLine("Exception"); 
    Console.WriteLine(e); 
} 

запуска службы и работает нормально, Visual Studio может подключиться к нему и создать рабочий клиент.

Но мне нужен файл WSDL, чтобы он взаимодействовал с PHP.

Я попытался

http://localhost:1234?wsdl 
http://localhost:1234/IOrderExecutor?wsdl 
http://localhost:1234/IOrderExecutor.wsdl 

без какого-либо успеха.

Я также попытался

svcutil /serviceName:IOrderExecutor order-executor.exe 

С следующим результатом:

Warning: Unable to load a service with configName 'IOrderExecutor'. To export 
a service provide both the assembly containing the service type and an executab 
le with configuration for this service. 
    Details:Either none of the assemblies passed were executables with configura 
tion files or none of the configuration files contained services with the config 
name 'IOrderExecutor'. 

Warning: No metadata files were generated. No service contracts were exported. 
To export a service, use the /serviceName option. To export data contracts, spe 
cify the /dataContractOnly option. This can sometimes occur in certain security 
contexts, such as when the assembly is loaded over a UNC network file share. If 
this is the case, try copying the assembly into a trusted environment and runnin 
g it. 

Как получить WSDL-файл из запущенного сервиса WCF?

+0

http://stackoverflow.com/questions/4860408/what-is-wsdl-uri-in-wcf –

+0

Нет результатов для HTTP: // локальный: 1234/IOrderExecutor.asmx WSDL либо –

+0

@ArsenZahray чем что-то не так. «... asmx? wsdl» может быть, если вы правильно разместили –

ответ

2

вы пробовали LOCALHOST:? 1234/IOrderExecutor/WSDL

попробовать это он может работает

+0

Whoa, я пробовал/wsdl? Wsdl/mex? Wsdl/mex/wsdl/basic? Wsdl/basic/wsdl (у меня есть две конечные точки, и ) и не пробовал /? wsdl .. WTF. Спасибо за помощь. – Bomberlt

+0

приветствую, я думаю, вы могли бы принять мой ответ, если он работает –

0

ваш ответ лежит здесь

// Add MEX endpoint 

svh.AddServiceEndpoint(
      ServiceMetadataBehavior.MexContractName, 
      MetadataExchangeBindings.CreateMexHttpBinding(), 
      httpLocation + "/mex" 
      ); 

EDIT: httpLocation + «/ Mex «это адрес, где вы получаете wsdl. также поведение httpGetEnabled должно быть истинным

+0

Как это ответить на вопрос? – FDinoff

0

Для просмотра wsdl вам необходимо включить MetaData, чтобы установить службуMetadata, как показано ниже.

< serviceMetadata httpGetEnabled="**true**"/>