Pergunta

Eu quero criar um serviço web para os meus clientes para que eles possam exibir seus dados em seus próprios sites. Desde que eu não sei o que plataforma de cada cliente está em execução, o que seria a melhor solução para criar um proxy para o serviço WCF que pode ser usado por todos os navegadores? Além disso, eu não sei como eu deveria apresentar os dados. Vamos supor que meus usuários não têm nenhuma habilidade desenvolvimento. Vou, por alguma outra interface, dar ao usuário a capacidade de baixar o código necessário para criar a solicitação e, em seguida, processar a resposta. Seria melhor para analisar uma resposta XML no lado do cliente, em seguida, criar a lista de dados ou ter a lista já formatada (em uma string) e ter o cliente fazer um document.write? Eu olhei para algumas soluções, mas eles parecem exigir o uso de uma página ASP com um gerente de script. Como eu disse, eu gostaria de algo bastante genérico para usar diferentes navegadores. Principalmente IE e Firefox.

Daniel

Foi útil?

Solução

Em primeiro lugar, desde que você não quer depender de Microsoft Ajax ScriptManager, não use no endpointBehaviors / comportamento. É JSON específico da Microsoft.

Felizmente, porém, WCF torna muito fácil para permitir que seu cliente para decidir se querem XML ou JSON genérico.

  1. Use o comportamento.






  2. Criar um atributo WebServiceHost personalizado e propriedade personalizada como descrito na Damian Mehers', WCF REST Services . No código Mehers', o tipo é determinada pelo tipo de solicitação de conteúdo. Você pode querer estendê-lo para examinar a URL, por exemplo, .xml ou .json ou format = xml |?. JSON

  3. No SerializeReply método, examine o URL.

    Mensagem pedido = OperationContext.Current.RequestContext.RequestMessage;
    Uri url = request.Properties [ "OriginalHttpRequestUri"] como Uri;
    // Examine? Formato de string de consulta
    System.Collections.Specialized.NameValueCollection colQuery = System.Web.HttpUtility.ParseQueryString (url.Query);
    corda strResponseFormat = colQuery [ "formato"];
    // ou examinar extensão
    corda strResponseFormat = url.LocalPath.Contains ( "json")? "Json": "xml";

  4. Defina o seu método (s)

    [OperationContract]
    [WebGet (UriTemplate = "Olá. {ResponseFormat}")] // ou "Olá? Format = {} ResponseFormat"
    [DynamicResponseType]
    public string Olá (string ResponseFormat)
    {
    retornar "Olá Mundo";
    }

Exemplo de URLs:
http: //localhost/myrest.svc/Hello.xml
http: //localhost/myrest.svc/Hello.json
ou
http:? //localhost/myrest.svc/Hello format = xml
http:? //localhost/myrest.svc/Hello format = json

  1. Ambos JSON e XML são fáceis de consumir entre os navegadores. Bibliotecas, tais como jQuery para JSON e Sarissa para make XML ainda mais fácil.

NOTA: Se você ver o erro "Não foi possível encontrar um endereço base que partidas esquema de http para o ponto final com WebHttpBinding de ligação", adicione o baseAddressPrefixFilters elemento e adicionar localhost (ou o seu domínio) para IIS nomes de cabeçalho host.

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
        <add prefix="http://localhost"/>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top