На стороне клиента возвращаемое значение операционного контракта WCF равно нулю! Любое решение? - PullRequest
2 голосов
/ 25 марта 2011

У меня есть Сервисный контракт в моей службе WCF, который возвращает экземпляр класса, который на самом деле является Контрактом сообщений. (Не данные договора). Контракт сообщения имеет свойства с атрибутом> [MessageBodyMember]

[MessageContract(WrapperName="AuthorizarionResponse", IsWrapped="true")]
public class AuthorizationResponse
{
  [MessageBodyMember] public string role {get;set;};
  [MessageBodyMember] public Organization organization {get; set;};
}

[ServiceContract]
interface IAuthorization
{
    [OperationContract]
    public AuthoriztionResponse GetAuthorizationResult(AuthorizationRequestMessage request);          

}

Organization класс использует XmlSerializer. Он не использует DataContract, потому что я хочу, чтобы служба WCF использовалась из существующих клиентов ASMX. Когда я отлаживаю сервис и вижу возвращаемое значение в методе «Операционный контракт», я вижу все, что я хочу вернуть из сервиса через этот контракт на операцию.

Но на стороне клиента я получаю нулевое значение!

Все заканчивается без каких-либо исключений / ошибок. Fiddler2 не дает никаких красных знаков / ошибок! Что будет не так?

Ответы [ 2 ]

3 голосов
/ 25 марта 2011

Проблема заключается в том, что Сервис отправляет ответное мыльное сообщение, не сформированное, как ожидалось, из кода контракта клиента. Сериализатор анализирует сообщение Soap на основе контракта, определенного в коде прокси-сервера в клиентском приложении, однако, если полученное мыльное сообщение не соответствует ожидаемому, сериализатор молча пропускает содержимое и перемещается вперед. Итак, ошибки нет, а также объект не заполнен, потому что сериализатор не нашел ожидаемое содержимое.

Итак, вам нужно определить, как клиент ожидает формирования мыльного сообщения ..

1 голос
/ 23 апреля 2018

Вы можете включить ведение журнала трассировки, как описано здесь

<system.diagnostics>
    <sources>
        <source     name="System.ServiceModel"
                    switchValue="Information, ActivityTracing"
                    propagateActivity="true">
            <listeners>
                <add    name="traceListener"
                        type="System.Diagnostics.XmlWriterTraceListener"
                        initializeData= "c:\wcf.svclog" />
            </listeners>
        </source>
    </sources>
</system.diagnostics>

, затем использовать SvcTraceViewer.exe из C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin или одну из его папок-братьев и сестер

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