Ссылка на службу WCF создает пустые методы из WSDL - PullRequest
10 голосов
/ 24 сентября 2010

Это моя первая попытка использовать WCF, поэтому я предполагаю, что делаю что-то неправильно. Я пытаюсь получить доступ к сервису мыла, определенному WSDL по адресу http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1?wsdl. Я использую VS2010, и я добавляю ссылку на сервис в свой проект и указываю на нее URL-адрес (или, скорее, нашу интранет-установку это), но когда я использую Object Browser для просмотра сервиса, операции над интерфейсом - это ВСЕ пустые методы без параметров. Кажется, что WCF неправильно читает информацию о типе. Он не дает ошибок, но дает множество предупреждений, таких как:

Предупреждение 1 Предупреждение о нестандартном инструменте: ошибка InvalidSessionException в операция getPermissions не может быть импортирован. Неподдерживаемый WSDL, ошибка часть сообщения должна ссылаться на элемент. Это сообщение об ошибке не ссылаться на элемент. Если у вас есть редактировать Доступ к документу WSDL вы можете исправить проблему, ссылаясь на элемент схемы с использованием элемента приписывать. Z: \ TestLibrary \ Service Ссылки \ Confluence \ Reference.svcmap 1 1 TestLibrary

Предупреждение 2 Пользовательское предупреждение инструмента: необязательный элемент расширения WSDL 'body' из пространства имен «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 \ Service Ссылки \ Confluence \ Reference.svcmap 1 1 TestLibrary

Что я делаю не так? Я попытался изменить конфиг сервиса с помощью комбинации опций, но я никогда не мог правильно вытащить типы из WSDL. Я предполагал, что WCF будет автоматически генерировать классы типов вместе с интерфейсом сервиса. Я должен выяснить, какие типы используются в WSDL и сам создавать классы и контракты данных, или это что-то еще?

Ответы [ 2 ]

5 голосов
/ 24 сентября 2010

Хммм ... интересно - я запустил 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.

0 голосов
/ 01 марта 2012

Только что столкнулся с этой проблемой в JIRA 4.4, и она РАБОТАЕТ, если вы используете более раннюю веб-ссылку вместо ссылки на службу.

Инструкции по выполнению этого см. В: Веб-ссылка и Сервисная ссылка

Это было самое простое решение для меня, поскольку я знаю, что JIRA движется в направлении REST (от SOAP), и я просто пытаюсь быстро начать работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...