2010-09-24 36 views
10

Đây là lần thử đầu tiên của tôi cố gắng sử dụng WCF, vì vậy tôi đoán tôi đang làm điều gì đó không chính xác. Tôi đang cố gắng truy cập dịch vụ xà phòng được WSDL định nghĩa tại http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1?wsdl Tôi đang sử dụng VS2010 và tôi thêm Tham chiếu dịch vụ vào dự án của mình và trỏ đến URL đó (hoặc đúng hơn là cài đặt mạng nội bộ của nó), nhưng khi tôi sử dụng Trình duyệt đối tượng để xem dịch vụ, các hoạt động trên giao diện là TẤT CẢ các phương thức trống không có tham số. Dường như WCF không đọc chính xác loại thông tin. Nó không cung cấp cho các lỗi, nhưng nó đem lại cho tấn cảnh báo như sau:Tham chiếu dịch vụ WCF tạo ra các phương thức void từ WSDL

Cảnh báo cảnh báo công cụ 1 tùy chỉnh: Fault tên InvalidSessionException trong getPermissions hoạt động không thể nhập khẩu. WSDL không được hỗ trợ, phần thông báo lỗi phải tham chiếu đến phần tử . Thông báo lỗi này không tham chiếu một phần tử. Nếu bạn có quyền truy cập chỉnh sửa vào tài liệu WSDL, bạn có thể khắc phục sự cố bằng cách tham chiếu một phần tử lược đồ bằng thuộc tính 'yếu tố' . Z: \ TestLibrary \ Dịch vụ Tài liệu tham khảo \ Confluence \ Reference.svcmap 1 1 TestLibrary

Cảnh báo cảnh báo công cụ 2 tùy chỉnh: Các tùy chọn WSDL mở rộng yếu tố 'body' từ namespace 'http://schemas.xmlsoap.org/wsdl/soap/' đã không được xử lý. XPath: // wsdl: định nghĩa [@ 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 \ Service Tham khảo \ Confluence \ Reference.svcmap 1 1 TestLibrary

Tôi đang làm gì sai? Tôi đã thử thay đổi cấu hình của dịch vụ bằng cách kết hợp các tùy chọn, nhưng tôi không bao giờ có thể kéo các loại từ WSDL một cách chính xác. Tôi đã giả định rằng WCF sẽ tự động tạo ra các lớp kiểu cùng với giao diện dịch vụ. Tôi có nên tìm ra loại nào đang được sử dụng trong WSDL và tự tạo ra các lớp và các hợp đồng dữ liệu, hay nó là cái gì khác?

Trả lời

5

hhmm ... thú vị - Tôi chạy svcutil.exe từ dòng lệnh chống lại URL mà bạn cung cấp, và trong khi tôi nhận được một tấn các cảnh báo về các vấn đề WSDL, tôi cũng nhận được một số mã - một cái gì đó như:

//------------------------------------------------------------------------------ 
// <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); 

Vì vậy, tôi sẽ cố gắng sử dụng svcutil.exe từ dòng lệnh để tạo tệp ConfluenceSoapService.cs của bạn và sau đó sử dụng tệp đó để nói chuyện với dịch vụ Confluence của bạn.

+1

+1 để đề xuất svcutil.exe. – Bernard

+0

Hmm ... có vẻ như nó đang hoạt động với svcutil.exe. Đó là thực sự kỳ lạ. Cảm ơn mặc dù. – StarKat99

+0

Cũng làm việc cho tôi, nếu bạn đi theo Visual Studio Bắt đầu trình đơn có một shortctu cho dấu nhắc lệnh VS mà làm cho svcutil dễ truy cập, sau đó: 'svcutil.exe http: // somedomain.com/someapi.wsdl' – AaronLS

0

Chỉ gặp sự cố này trên JIRA 4.4 và nó KHÔNG hoạt động nếu bạn sử dụng Tham chiếu web cũ hơn thay vì tham chiếu dịch vụ.

Để được hướng dẫn về việc này, xem: Web Reference vs. Service Reference

Đây là giải pháp đơn giản nhất đối với tôi, vì tôi biết JIRA đang hướng tới REST (xa SOAP) và tôi chỉ cố gắng để nhanh chóng đứng dậy và chạy.

Các vấn đề liên quan