WCF FaultContract вызывает сбой ссылки на службу обновления

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

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

[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 ответ

Решение

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

<?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
Другие вопросы по тегам