2010-01-12 2 views
1

Я развернул WCF на хост, и мой сайт ASP.NET пытается использовать ту же службу.WCF в среде частичного доверия

Я получаю эту ошибку:

The Binding with name BasicHttpBinding failed validation because it contains a BindingElement with type System.ServiceModel.Channels.MtomMessageEncodingBindingElement which is not supported in partial trust. Consider using BasicHttpBinding or WSHttpBinding, or hosting your application in a full-trust environment. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: The Binding with name BasicHttpBinding failed valiadation because it contains a BindingElement with type System.ServiceModel.Channels.MtomMessageEncodingBindingElement which is not supported in partial trust. Consider using BasicHttpBinding or WSHttpBinding, or hosting your application in a full-trust environment.

Как обойти это?

+0

Является ли хост WCF и хост ASP.NET в том же домене? –

+0

Также, кто является вашим поставщиком услуг? Например, это GoDaddy? –

+0

Kris: WCF, организованный одним провайдером [не уверен, кто это делает клиент, который решил выбрать своего провайдера, пытаясь собрать эту информацию]. Asp.net размещен внутри клиента ... Они не в одном домене – ltech

ответ

1

Вы не можете «обойти» частичный хост доверия, чтобы запускать код, требующий полного доверия.

У вас есть два варианта. Во-первых, следуйте рекомендациям сообщения об ошибке и используйте привязку, которая не требует полного доверия. Или, во-вторых, вы можете найти хост, который будет запускать ваш код в полном доверии.

+1

Что заставляет связывание полностью доверять? – Sam

2

То, что он говорит: не используйте MTOM или хост в полной среде доверия.

Кодировка текста сообщения:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="myBinding" messageEncoding="Text"> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
</system.serviceModel> 

Большинство общих хостинг-провайдеров только обеспечит частичное доверие .NET хостинг. Вам понадобится (полу) выделенный компьютер для полного доверия или оглянуться в Интернете для хостинг-провайдера, который хочет рискнуть.

0

У вас есть различные варианты

  • использовать другую привязку
  • сделать код полного доверия (не очень хорошей идею, и запрещен во многих корпоративных среды и центры обработки данных)
  • сохранить ваш код частично доверенным, но инкапсулировать WCF звонит в полностью доверенную сборку, которая утверждает необходимые разрешения для вызывающего абонента (что требует тщательной проверки сборки и т. д.)

Позвольте мне подробно остановиться на третьем варианте с примером. Скажем, у вас есть метод вызова MakeServiceCallToDangerousSite (строка siteUrl). Вам нужно, чтобы это вызывалось из частично доверенного кода, вы не хотите, чтобы это было неправильно. Что делать? Во-первых, вы можете избежать получения URL-адреса «опасного сайта» от своего вызывающего абонента, то есть MakeServiceCallToDangerousSite(). Во-вторых, теперь, когда вы полностью контролируете этот вызов, вы можете утверждать разрешения CLR, необходимые для выполнения этого звонка от имени ваших абонентов, декларативно (на уровне метода) или по необходимости (например, permission.Assert(); try {DangerousCall ();} наконец {CodeAccessPermission.RevertAssert();} В-третьих, сборка должна быть полностью доверена, и для этого вам нужно, чтобы она была в GAC, которая также нуждается в том, чтобы сборка была сильной. Надеюсь, что это помогает, по крайней мере, как указатель на лучшее объяснение на MSDN :-)

+0

Ariel: Как бы вы могли использовать свой третий вариант - «сохранить ваш код частично доверенным, но инкапсулировать вызовы WCF в полностью доверенную сборку, которая утверждает необходимые разрешения для вызывающего абонента (что требует тщательной проверки сборки и т. Д.)». – ltech

+0

Itech - я обновил свое редактирование (он не подходит здесь), я надеюсь, что это поможет. – Ariel

Смежные вопросы