【问题标题】:How do I get WSDL file from a running service?如何从正在运行的服务中获取 WSDL 文件?
【发布时间】:2013-05-15 08:02:02
【问题描述】:

以下是我启动 Web 服务的方式:

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.

如何从正在运行的 WCF 服务获取 WSDL 文件?

【问题讨论】:

标签: c# wcf wsdl


【解决方案1】:

你试过了吗 localhost:1234/IOrderExecutor/?wsdl

试试这个可能有用

【讨论】:

  • 哇,我试过 /wsdl ?wsdl /mex?wsdl /mex/wsdl /basic?wsdl /basic/wsdl (我有两个端点,)并没有尝试 /?wsdl..哇。感谢您的帮助。
【解决方案2】:

你的答案就在这里

// Add MEX endpoint

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

编辑: httpLocation + "/mex" 是获取 wsdl 的地址。也行为 httpGetEnabled 必须为真

【讨论】:

  • 这如何回答这个问题?
【解决方案3】:

要查看 wsdl,您需要启用 MetaData,如下所示设置 serviceMetadata。

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

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多