Мыло WCF 4 и конечная точка Json, защищенные с помощью DotNetOpenAuth - PullRequest
7 голосов
/ 05 апреля 2011

У меня есть проект службы WCF 4, который я создал с помощью шаблона службы WCF REST 40.

Моя цель - представить одну службу WCF как конечную точку SOAP и конечную точку RESTful, которая возвращает данные в формате JSON. Обе конечные точки должны быть защищены с помощью моего DotNetOpenAuth OAuthAuthorizationManager, который скопирован из примера проекта.

Таким образом, у меня есть службы SOAP WCF, которые могут успешно авторизовать потребителя у моего поставщика услуг OAuth. Для этого я использовал ту же конфигурацию, которая была в примере поставщика услуг DotNetOpenAuth.

Теперь я пытаюсь настроить конечную точку ответа JSON WCF RESTful для той же службы, а также защитить эту конечную точку. Я не уверен, как это сделать. Моей первоначальной идеей было сделать так:

<behaviors>
  <serviceBehaviors>
    <behavior name="DataApiBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceAuthorization principalPermissionMode="Custom" serviceAuthorizationManagerType="OAuthServiceProvider.Core.OAuthAuthorizationManager, OAuthServiceProvider" />
    </behavior>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>

<services>
  <service behaviorConfiguration="DataApiBehavior" name="OAuthServices.DataApi">
    <endpoint address="soap" binding="wsHttpBinding" contract="OAuthServices.Interfaces.IDataApi"/>
    <endpoint address="json" binding="webHttpBinding" contract="OAuthServices.Interfaces.IDataApi"/>
  </service>
</services>

А потом я увидел этот пост в блоге о том, как заставить RESTful WCF-сервисы + DotNetOpenAuth работать вместе: http://www.theleagueofpaul.com/codesnippet-ooo-openid-odata-oauth-together

Я не уверен, что установка Factory и раздел ServiceAuthorization конфигурации службы могут вызвать проблемы.

Я также не уверен, что мне нужно что-то делать в методе RegisterRoutes в Global.asax:

private void RegisterRoutes()
{
    RouteTable.Routes.Add(new ServiceRoute("DataApi", new WebServiceHostFactory(), typeof(DataApi)));
}

Любой совет здесь будет оценен. Спасибо за любую помощь.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

1 голос
/ 18 апреля 2011

Не уверен, но я слышал, что для включения SOAP вам нужно использовать basicHttpBinding и установить

aspNetCompatibilityEnabled = "истинный"

Я могу ошибаться, но почему бы не попробовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...