У меня есть проект службы 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)));
}
Любой совет здесь будет оценен. Спасибо за любую помощь.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.