WCF服务引用从WSDL生成void方法

时间:2010-09-24 17:05:51

标签: c# wcf web-services visual-studio-2010

这是我第一次尝试使用WCF,所以我猜我做错了。 我正在尝试访问由http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1?wsdl我在使用VS2010的WSDL定义的soap服务,并且我向我的项目添加了一个服务引用并将其指向那里的URL(或者更确切地说,我们的内部网安装它),但是当我使用对象浏览器查看服务时,接口上的操作是没有参数的所有void方法。似乎WCF没有正确读取类型信息。它没有给出错误,但它提供了大量的警告,如下所示:

  

警告1自定义工具警告:故障   在。中命名为InvalidSessionException   操作getPermissions不能   进口。不支持的WSDL,错误   消息部分必须引用   元件。此故障消息不会   引用一个元素。如果你有编辑   您可以访问WSDL文档   通过引用a来解决问题   使用'element'的schema元素   属性。 Z:\ TestLibrary \服务   参考文献\ Confluence \ Reference.svcmap 1 1 TestLibrary

     

警告2自定义工具警告:   可选的WSDL扩展元素'body'   从命名空间   'http://schemas.xmlsoap.org/wsdl/soap/'   没处理。 XPath的:   // WSDL:定义[@targetNamespace = 'http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1'] / WSDL:结合[@名称= 'confluenceservice-v1SoapBinding'] / WSDL:操作[@名称= 'getPermissions'] / WSDL:输入[@name ='getPermissionsRequest'] Z:\ TestLibrary \ Service   参考文献\ Confluence \ Reference.svcmap 1 1 TestLibrary

我做错了什么?我尝试使用选项组合来更改服务的配置,但我永远无法正确地从WSDL中提取类型。我一直在假设WCF会自动生成类型类以及服务接口。我是否应该弄清楚WSDL​​中正在使用哪些类型并自己创建类和数据合同,还是其他什么?

2 个答案:

答案 0 :(得分:5)

嗯...有趣 - 我从你提供的那个URL命令行运行svcutil.exe,虽然我收到大量关于WSDL问题的警告,但我也得到了一些代码 - 比如:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.4952
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1", ConfigurationName="ConfluenceSoapService")]
public interface ConfluenceSoapService
{
    // CODEGEN: Generating message contract since the wrapper namespace (http://soap.rpc.confluence.atlassian.com) of message getPermissionsRequest does not match the default value (http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1)
    [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
    [System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, Use=System.ServiceModel.OperationFormatUse.Encoded)]
    getPermissionsResponse getPermissions(getPermissionsRequest request);

    // CODEGEN: Generating message contract since the wrapper namespace (http://soap.rpc.confluence.atlassian.com) of message searchRequest does not match the default value (http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1)
    [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
    [System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, Use=System.ServiceModel.OperationFormatUse.Encoded)]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemoteException))]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(Vector))]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemotePermission))]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemoteNodeStatus))]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemotePageHistory))]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemoteContentPermission))]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(AbstractRemotePageSummary))]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemoteSpaceSummary))]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemoteSearchResult))]
    searchResponse search(searchRequest request);

因此,我会尝试使用命令行中的svcutil.exe生成您的ConfluenceSoapService.cs文件,然后使用该文件与您的Confluence服务进行通信。

答案 1 :(得分:0)

刚刚在JIRA 4.4上遇到过这个问题,如果您使用旧的Web引用而不是服务引用它就可以工作。

有关执行此操作的说明,请参阅:Web Reference vs. Service Reference

这对我来说是最简单的解决方案,因为我知道JIRA正在向REST(远离SOAP)发展,我只是想快速启动并运行。