2010-09-24 88 views
10

這是我第一次嘗試使用WCF,所以我猜我正在做一些不正確的事情。 我試圖訪問由WSDL定義的soap服務http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1?wsdl我正在使用VS2010,並且向我的項目添加服務引用並將其指向那裏的URL(或者更確切地說,我們的Intranet安裝它),但當我使用對象瀏覽器查看服務時,接口上的操作都是無參數的無效方法。看來WCF沒有正確讀取類型信息。它不給錯誤的,但它提供了大量的警告類似如下:WCF服務引用從WSDL生成無效方法

警告1個自定義工具警告:在 操作getPermissions故障 命名InvalidSessionException不能 進口。不支持的WSDL,錯誤 消息部分必須引用 元素。此故障消息不包含 引用的元素。如果編輯 訪問WSDL文檔,則可以使用 屬性通過引用 模式元素來修復此問題。 Z:\ TestLibrary \服務 參考\合流\ Reference.svcmap 11 TestLibrary

警告2自定義工具警告: 可選WSDL擴展元素 '身體' 從命名空間 'http://schemas.xmlsoap.org/wsdl/soap/' 沒有處理。 XPath: // wsdl:definitions [@ targetNamespace ='http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1']/wsdl:binding [@ name ='confluenceservice-v1SoapBinding']/wsdl:operation [@ name ='getPermissions']/wsdl:input [@ name = 'getPermissionsRequest'] Z:\ TestLibrary \服務 參考\合流\ Reference.svcmap 11 TestLibrary

我在做什麼錯?我試着用選項組合來更改服務的配置,但我永遠無法正確地從WSDL中獲取類型。我一直假設WCF會自動生成類型類以及服務接口。我是否應該弄清楚WSDL​​中正在使用哪些類型,並自己創建類和數據契約,還是其他的東西?

回答

5

HHMM ...有趣 - 我跑svcutil.exe從針對您所提供的URL的命令行,而我得到一噸約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

+1用於提示svcutil.exe。 – Bernard 2010-09-24 18:41:36

+0

嗯......它似乎與svcutil.exe一起工作。這真的很奇怪。不過謝謝。 – StarKat99 2010-09-24 19:32:33

+0

也適用於我,如果你在Visual Studio的開始菜單下有一個簡短的命令提示符讓svcutil易於訪問,那麼:'svcutil.exe http:// somedomain.com/someapi.wsdl' – AaronLS 2014-04-01 14:10:13

0

剛剛在JIRA 4.4上遇到了這個問題,如果您使用舊的Web引用而不是服務引用,它會工作。

有關此操作的說明,請參見:Web Reference vs. Service Reference

這對我來說是最簡單的解決方案,因爲我知道JIRA向REST移動(遠離SOAP),我只是想快速啓動和運行。

相關問題