WCF: операции с параметрами out не поддерживаются - PullRequest
7 голосов
/ 08 января 2011

Я создал простой сервис WCF внутри проекта WebApplication.

[ServiceContract(Namespace = "http://my.domain.com/service")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService
{
    [OperationContract]
    public string PublishProfile(out string enrollmentId, string registrationCode)
    {
        enrollmentId = null;
        return "Not supported";
    }

build - все успешно скомпилировано

После того, как я попытался открыть сервис в браузере,возникла следующая ошибка:

Операция «PublishProfile» в контракте «MyService» указывает параметр «out» или «ref».Операции с параметрами 'out' или 'ref' не поддерживаются

Не могу ли я использовать параметры 'out'?

Что здесь не так?

Спасибо

PS Я использую VS2008 SP1, .NET 3.5

Ответы [ 5 ]

4 голосов
/ 10 января 2011

Проблема в моем случае заключалась в том, что конфигурация службы по умолчанию, созданная в приложении ASP.NET с помощью мастера Visual Studio, представляла собой тип службы. Привязка конечной точки была "webHttpBinding". Насколько я понимаю, сейчас это является обязательным для служб REST, и у них просто нет физической возможности работать с параметрами. Для них выходной параметр не поддерживается. И что мне действительно нужно, так это «basicHttpBinding», который позволяет работать с параметрами.

Большое спасибо всем, кто помог мне понять это.

2 голосов
/ 08 января 2011

Ответ, который я нашел, был:

"Идея параметра out состоит в том, что метод создает экземпляр пустой ссылки, которую вы передаете. Веб-служба не имеет состояния, поэтому у вас есть дескрипторна объекте, который входит в веб-сервис в качестве параметра, не будет таким же, как тот, который попадает в серверную часть веб-сервиса. Природа этого препятствует выходу параметров ".

Источник

1 голос
/ 08 января 2011

Попробуйте это:

...
[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]
public string PublishProfile(out string enrollmentId, string registrationCode)
...

Я считаю, что стиль тела по умолчанию (голый) поддерживает только одно возвращаемое значение.

0 голосов
/ 08 января 2011
0 голосов
/ 08 января 2011

Я думаю, что параметр Out должен идти после.

должно быть так:

public string PublishProfile(string registrationCode, out string enrollmentId)

Кроме того, вы устанавливаете строку на null - почему бы не использовать string.Empty?

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