【问题标题】:Using svcutil to generate xsd files for client proxy使用 svcutil 为客户端代理生成 xsd 文件
【发布时间】:2012-02-05 19:29:17
【问题描述】:

我正在尝试使用 Svcutil 导出元数据以从本地托管服务生成代理。我不想进入 Visual Studio 并单击“添加服务参考”,因为这是我的学习练习(!)

我使用svcutil如下:

Svcutil /d:c:\temp /t:metadata http://localhost/IISCalculatorService/service.svc

这会生成两个 WSDL 文件,calculatorservice.wsdl 和 tempuri.org.wsdl。但是我希望它也能生成两个 .XSD 文件。如果没有这些 .XSD 文件,我将无法使用 svcutil 生成客户端代码。

我在使用 svcutil 时是否遗漏了什么,或者我的理解错误?任何帮助表示赞赏。

这是服务的 web.config

<?xml version="1.0"?>
<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0"/>
    </system.web>
  <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior>
          <serviceMetadata httpGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="false"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
        <services>
            <service name="CalculatorService.Calculator">
                <endpoint address="" binding="basicHttpBinding" contract="CalculatorService.Contracts.ICalculator" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            </service>
        </services>
    </system.serviceModel>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer>
</configuration>

【问题讨论】:

  • 您可以使用 svcutil 生成代理,然后如果您不想通过添加服务引用在项目中使用代理。如果您希望与 wsdl 相关的 xsd 验证其中的某些内容,那么您只需从 wsdl 中的指定 url 下载它并将其添加到您的项目中

标签: wcf proxy svcutil.exe


【解决方案1】:

使用 disco.exe 生成 XSD 文件。 http://msdn.microsoft.com/en-us/library/cy2a3ybs%28v=vs.80%29.aspx

打开 Visual Studio 命令提示符并编写 disco http://localhost/IISCalculatorService/service.svc

【讨论】:

  • 谢谢。这将生成calculator.wsdl、services.disco、service.wsdl 和results.discomap。 (没有 .xsd 文件)然后 MSDN 链接建议使用 wsdl.exe 生成客户端代码,即不需要 .XSD 来提供 svcutil?
  • 是否有可能是 web.config 中的服务设置不正确?
  • 你想要达到的目标是什么?如果您只想调用 C# 代理但不想在 VS 中使用添加服务引用,您可以执行 svcutil localhost/IISCalculatorService/service.svc
  • 嗨,是的,我们的目标是在不使用 VS 的情况下创建一个 c# 代理。
【解决方案2】:

如果你是直接找服务参考,可以试试这个

svcutil.exe http://localhost/IISCalculatorService/service.svc?wsdl

希望对你有所帮助。

【讨论】:

  • 谢谢,尝试了这个并从 svcutil 得到一个错误,指出“......元数据文档不包含任何有效的合同或服务......”
  • 你能在IE浏览localhost/IISCalculatorService/service.svclocalhost/IISCalculatorService/service.svc?wsdl吗?您的服务托管可能存在一些问题。
  • 是的,可以很好地浏览它们。认为该服务没有让 svcutil/wsdl 看到它需要的信息
  • 在您的 web.config 中,检查这一点,您的服务应该有一个端点为 ,其次,您的服务行为应该有
  • 问题似乎与 IIS 设置有关。如果我通过控制台应用程序托管相同的服务,svcutil 会生成 xsd 和 wsdl 文件
猜你喜欢
  • 2011-08-23
  • 2014-04-25
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2017-09-22
  • 2012-10-16
  • 1970-01-01
  • 2011-05-25
相关资源
最近更新 更多