Услуги WCF не удалось в аутентификации на сервере 2012, но в порядке в Win7?

StackOverflow https://stackoverflow.com//questions/23001433

Вопрос

Я создал службу WCF с ролью базовой аутентификации и авторизации. И реализация каждой операции похожа на

[PrincipalPermission(SecurityAction.Demand, Role = RoleConstants.Customer)]
[PrincipalPermission(SecurityAction.Demand, Role = RoleConstants.CustomerStaff)]
public void DoSomething()
{
}
.

Поставщик членства и rolemanager - это те для MySQL, а не в GAC. Сертификаты SSL генерируются IIS 7 для HTTPS.

И у меня есть некоторые интеграционные тесты, такие как

using (var client = new MyProxy("DefaultBinding_ILicensingService"))
{
    client.ClientCredentials.UserName.UserName = "AbcShop";
    client.ClientCredentials.UserName.Password = "tttttttt";

    client.DoSomething();
}
.

Один экземпляр работает на моей машине Dev Win7, а другой - на тестовом сервере сервера 2012 года. Оба экземпляра службы WCF работают хорошо.

Однако через 1 месяцев я обнаружил, что экземпляр на сервере 2012 больше не работает, и не удалось в аутентификации, со следующим сообщением.

<Сильное> Обновление:

System.ServiceModel.Security.MessageSecurityException : An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail.
---- System.ServiceModel.FaultException : An error occurred when verifying security for the message.
Stack Trace:

Server stack trace: 
   at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout)
   at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
.

<Сильное> Обновление:

Я наблюдал следующее и исключил некоторые возможные причины.

  1. Базы данных AUTH на обоих машинах идентичны, и я мог видеть, что служба WCF выполняет SQL-запросы для получения информации о участниках после того, как клиент выполняет запрос.
  2. Я сравнил привязку и настройки IIS, а также Web.config на обеих машинах, которые в основном идентичны за исключением некоторых адресов.
  3. Зритель событий не показывает предупреждения о службе WCF.
  4. Реализация службы WCF украшена этим артюрем. этот вопрос.
  5. и я сравнил загруженные сборки в обоих экземплярах. В Windows 7 системные сборки в основном из Windows \ Microsoft.net \ assuse \ gacxxx \ xxx, однако на сервере 2012 года некоторые сборки из Windows \ Assumber \ NANANIMAGES_V4.0.30319_64, вот некоторые сборки, расположенные в roadimages: .

    System   
    System.Activities   
    System.Core   
    System.Data.DataSetExtensions   
    System.Drawing   
    System.Enumerics
    System.ServiceModel.Activities   
    System.WorkflowServices   
    System.XAML   
    System.ServiceModel.Web
    
    .

    Напротив, в Win 7, только система отнационарных. Я не уверен, что расположение ассемблей или родных изображений может изменить поведение.

    Услуги и клиенты разработаны с использованием VS 2012 на .NET Framework 4.5.

    Что еще может сделать экземпляр на сервере 2012 сбой?

Это было полезно?

Решение

Проблемы разрешены.

Корень приводов: отсутствует ASP .NET MVC Сборки на сервере 2012.

Фон в том, что я хочу, чтобы Служба WCF поделиться одной и той же базой данных AUP с приложениями MVC, которые будут встроены в будущем. Таким образом, провайдер-члена и управляющий Auth Manager являются теми из MVC, и база данных MySQL, поэтому провайдеры находятся из компонента с открытым исходным кодом, который связан с MVC.

Причины, по которым мой неисследованный обработчик исключений и просмотра событий не смогли ловить предупреждения о пропущенных узлах: 1. PC DEV использовался предыдущим разработчиком, который любил GAC. Вы знаете, что GAC может вызвать множество проблем в PC DEV. Тонны сборки из MVC 1,2, а 3 были в GAC. 2. 3-й компонент, взаимодействующий с MVC, имеет некоторую плохую практику программирования где-то глотание некоторых исключений о пропущенных сборе.

После того, как я сравнил загруженные сборки один за другим в обеих машинах, я нашел экземпляр службы WCF на сервере 2012 года, не имел Webmatrix.webdata.dll. После того, как я скопировал сборку в каталог BIN виртуального каталога, я получил цепочку сообщений об ошибках о более отсутствующих сборочных узлах после того, как я скопировал пропущенные сборки, сообщали по одному на один. Эти сборки в основном принадлежат MVC. Сообщения об ошибках появились на стороне клиента в ответе от службы в HTML, а также просмотра событий на стороне сервера.

Так что я теперь обеспечиваю сценарии развертывания, чтобы включить соответствующие сборки.

, по-видимому, после того, как служба извлекла информацию элемента от базы данных AUTH, сервис будет делегировать информацию в другие сборки MVC для дальнейшей обработки, и каким-то образом 3-й компонент проглатывал исключение о пропущенных сборочках. И другие части аутентификации получили неправильный сигнал, а затем дали вводящее в заблуждение предупреждающее сообщение о «проверке безопасности ...».

Урок: 1. Не GAC в разработке Dev. Если вы унаследовали машину Dev от кого-то, лучше инвестировать когда-нибудь в un-GAC, которые должны были быть частными сборками через XCOPY. 2. Некоторые 3-я сторонние компоненты могут иметь некоторую грязную практику против защитных программиров. В моем случае компонент проглотил предупреждения о пропущенных сборе. 3. Дешевле сравнивать загруженные сборки, прежде чем расследовать другие возможные причины. Я использую Process Explorer, чтобы переписать загруженные сборки в W3WP.exe.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top