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
- Путь по умолчанию для этого в Visual Studio 2010
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools