У меня есть клиент Silverlight, разговаривающий с веб-сервером (который, конечно, является приложением ASP.NET), использующим WCF.
Теперь, когда настройка безопасности WCF не соответствует настройке, определенной в IIS,коммуникация не получается, конечно.Например, настройки SSL виртуального каталога могут указывать, что сертификат клиента следует игнорировать, но для конфигурации WCF может потребоваться сертификат клиента.Это конфликт.Попытка установить связь с помощью WCF от клиента Silverlight к веб-серверу приводит к NotSupportedException
, который позже включается в ServiceActivationException
, брошенный в рабочий процесс IIS:
System.NotSupportedException occurred
Message=The SSL settings for the service 'SslRequireCert' does not match those of the IIS 'Ssl'.
Source=System.ServiceModel.Activation
StackTrace:
at System.ServiceModel.Activation.HostedAspNetEnvironment.ValidateHttpsSettings(String virtualPath, Nullable`1& requireClientCertificate)
InnerException:
Однако это исключениене распространяется в браузер.Один из операторов catch, выполняемый во время разматывания стека (найденный в методе HostedHttpRequestAsyncResult.BeginRequest
), проверяет метод http и, если это не GET, полностью исключает исключение:
catch (ServiceActivationException exception)
{
if (string.Compare(GetHttpMethod(), "GET", StringComparison.OrdinalIgnoreCase) == 0)
{
if (exception.InnerException is HttpException)
{
throw exception.InnerException;
}
else
{
throw;
}
}
SetStatusCode((int)HttpStatusCode.InternalServerError);
SetStatusDescription(HttpChannelUtilities.StatusDescriptionStrings.HttpStatusServiceActivationException);
CompleteOperation(null);
}
(я использовал .NET Reflectorпроследите выполнение)
Теперь, хотя исходное исключение содержит очень точное описание ошибки, последнее исключение абсолютно бесполезно.
Мой вопрос, есть ли что-нибудь сделать?Можно ли заставить WCF использовать метод GET?Есть ли смысл?И как мы должны устранять подобные проблемы, если они проглочены по пути?
Заранее большое спасибо.
EDIT1
Хочу подчеркнуть, что у меня нет проблем с регистрацией этих ошибок на стороне веб-сервера.Я использую атрибут Factory метаданных @ServiceHost для определения пользовательского типа ServiceHost, где я могу регистрировать ошибки в его методе OnOpen.Проблема в том, что я хочу видеть значимые ошибки, поступающие в браузер.
EDIT2
Необходимо немного контекста.Мне нужно иметь возможность устранять неполадки при входе в систему.Все они видны в журнале веб-сервера.Однако иногда очень удобно видеть те же ошибки на стороне клиента без необходимости запрашивать файл журнала веб-сервера.Следовательно, все ошибки входа в систему выводятся на консоль отладки (видимую в DbgView) и консоль журнала браузера.Это облегчает поиск неисправностей.