Какова лучшая практика для нескольких типов конечных точек WCF? т.е. JSON, JSONP, SOAP & POX? - PullRequest
1 голос
/ 12 января 2011

Какова наилучшая практика для нескольких типов конечных точек WCF?то есть: JSON, JSONP, SOAP & POX?Я использую WCF 3.5.

Например, у меня есть следующий веб-сервис JSONP:

namespace RivWorks.Web.Service.JSONP
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceContract(Name = "Negotiate", Namespace = "http://rivworks.com/Services/2009/01/15")]
    public class Negotiate //: svcContracts.INegotiateService 
    {
        #region Constructors
        public NegotiateService() { }
        #endregion

        #region Methods
        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json)]
        [JSONPBehavior(callback = "method")]
        public dto.NegotiateSetup GetSetup(string method, string jsonInput)
        { … }

        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json)]
        [JSONPBehavior(callback = "method")]
        public List<dto.NegotiateSetup> GetSetupAll(string method, string jsonInput)
        { … }
        #endregion
    }
}

Теперь мне нужно предоставить версию SOAP и POX.Сначала я думал создать проект приложения WCF для каждой конечной точки типа сервиса.Затем опубликуйте каждый из них в каталоге приложений на главном веб-сайте.

У меня есть внутренняя «шина», в которой живет рабочий код. Я простохочу обернуть этот код шины различными конечными точками обслуживания.Что является лучшим практическим способом сделать это?

PS: Есть ли инструмент для объединения WCF web.config (s) в основной сайт web.config?

TIA

-kb


ОБНОВЛЕНИЕ: Как вы работаете с различными декораторами, которые могут быть применены к сигнатуре метода.т.е. - сравнить следующие методы (которые идентичны) и связанные с ними декораторы:

Декоратор для конечной точки POX:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml)]
public bool ValidateUser(string UserName, string Password)
{
    ...
}

против Декоратора для конечной точки JSON:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public bool ValidateUser(string UserName, string Password)
{
    ...
}

А вот еще один пример, где меняется сама подпись метода:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
[JSONPBehavior(callback = "method")]
public dto.NegotiateSetup GetSetup(string method, string jsonInput)
{
    // Deserialize the input and get all the data we need...
    JObject o = Newtonsoft.Json.Linq.JObject.Parse(jsonInput);
    string urlRef = String.Format("{0}", o["ref"]).Drop("\"");
    string clientDate = String.Format("{0}", o["dt"]).Drop("\"");
    string stringProductID = String.Format("({0})", o["productId"]).Drop("\"").Drop("(").Drop(")");
    string SKU = String.Format("{0}", o["sku"]).Drop("\"");
    string env = String.Format("{0}", o["env"]).Drop("\"");
    string stringCompanyID = String.Format("({0})", o["CompanyId"]).Drop("\"").Drop("(").Drop(")");
    string boolPortalFlag = String.Format("({0})", o["PortalFlag"]).Drop("\"").Drop("(").Drop(")");
...
}

против типа конечной точки POX:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml)]
public dto.NegotiateSetup GetSetup(string urlRef, string clientDate, string stringProductID, string SKU, string env, string stringCompanyID, string boolPortalFlag)
{
...
}

1 Ответ

1 голос
/ 13 января 2011

Зачем вам нужен отдельный проект? WCF может предоставлять множество сервисов на многих конечных точках, только в одном проекте.

Просто добавьте дополнительные конечные точки в виде файлов .svc. Делайте все, что вам нужно сделать с маршрутизацией, если вы чувствительны к «.svc» в конце (хотя помните, что люди не видят .svc).

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