WCF FaultContract вызывает сбой ссылки на службу обновления - PullRequest
2 голосов
/ 19 января 2010

У меня есть интерфейс IServiceFacade, украшенный атрибутами [ServiceContract] и [OperationContract].Когда я выполняю Update Service Reference через VS2005 из обозревателя решений, он работает нормально.Теперь я хочу добавить атрибуты [FaultContract] ко всем методам в интерфейсе IServiceFacade.Когда я добавляю атрибуты к нескольким методам, Update Service Reference все еще работает.Однако, если число украшенных методов достигает определенного числа, обновление справки службы завершается неудачно.Похоже, он не имеет ничего общего с методами, которые оформлены в контрактах с ошибками.

Вот контракт на обслуживание:

[ServiceContract]
public interface IServicesFacade
{

    [OperationContract]
    [FaultContract(typeof(SecurityFault))]
    bool UserHasWriteRights();
    ...
}

Вот реализация ошибки:

[DataContract]
public class SecurityFault
{
    private string _message;

    public SecurityFault (string message)
    {
        _message = message;    
    }

    [DataMember]
    public string Message
    {
        get { return _message; }
        private set { _message = value;}
    }
}

1 Ответ

3 голосов
/ 20 января 2010

Хорошо, я нашел причину и решение. В основном размер моего контракта стал слишком большим. Чтобы это исправить, добавьте файл svcutil.exe.config в каталог, где находится svcutil 1 . Конфиг должен выглядеть примерно так:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>

    <client>
        <endpoint name="net.tcp" binding="netTcpBinding" bindingConfiguration="GenericBinding"
        contract="IMetadataExchange" />
        <endpoint name="http" binding="wsHttpBinding" bindingConfiguration="SecureBinding" contract="IMetadataExchange" />
    </client>

    <bindings>

        <netTcpBinding>
            <binding name="GenericBinding" maxBufferPoolSize="2147483647"
            maxReceivedMessageSize="2147483647" >
                <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647" />
                <security mode="None"/>
            </binding>
        </netTcpBinding>

        <wsHttpBinding>
            <binding name="SecureBinding" maxBufferPoolSize="2147483647"
            maxReceivedMessageSize="2147483647" >
                <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647" />
                <security mode="Message">
                    <transport clientCredentialType="Windows" />
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
</system.serviceModel>
</configuration>

Более подробную информацию можно найти на http://geekswithblogs.net/claraoscura/archive/2007/08/20/114806.aspx

<Ч />
  1. Путь по умолчанию для этого в Visual Studio 2010 - C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...