Rest Wcf Service , Inserir Headers a quando chamada do Mesmo c#

alfinete

Power Member
estamos em vs 2010

Tenho uma Solução Chamda RestService com 4 projectos :

· Generic.RestService (Funções Genericas / classes de dados)

· RestService (servico)

· Test.RestService (teste do serviço em windows forms)

· WebTest.restservice (teste do serviço em web form)



Generic.restService
____________________________________________________________


classe referente aos dados do Header a receber no serviço

HeaderData.cs

Código:
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.Serialization;


namespace Generic.RestService

{




  [DataContract]

  public class HeaderData

  {


  [DataMember]

  public string User { get; set; }


  [DataMember]

  public string Password { get; set; }


  [DataMember]

  public string Bodytoken { get; set; }


  [DataMember]

  public string Provider { get; set; }


  [DataMember]

  public string Catalogo { get; set; }


  [DataMember]

  public string Json { get; set; }

  }



}


RestService
___________________________________________________________

Tem a claase referente a função do svc "RestServiceImpl.svc"


Código:
  public string GetJson()
  {

  string Dados = string.Empty;
  HeaderData HDData = new HeaderData();

  // le os headers referente ao serviço
  HDData.User = Generic.GetValueHeader("User");
  HDData.Password = Generic.GetValueHeader("Password");
  HDData.Provider = Generic.GetValueHeader("Provider");
  HDData.Catalogo = Generic.GetValueHeader("Catalogo");
  HDData.Bodytoken = Generic.GetValueHeader("Body_token");

  byte[] byteArrayB64 = Convert.FromBase64String(HDData.Bodytoken);
  HDData.Json = System.Text.Encoding.UTF8.GetString(byteArrayB64);


  //HeaderData HD = new HeaderData();

  //HD.Bodytoken = "eyJOdW1GYWN0dXJhIjoiQUFBQTEyMzQ1IiwiTklGIjoiMjEyNTE1ODc0IiwiTm9tZSI6IkpvYW9TaWx2YSJ9";
  //HD.Catalogo = "Catalogo";
  //HD.Provider = "provider";
  //HD.Password = "pass";
  //HD.User = "user";

  // ExnternalAccount model = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<ExnternalAccount>(AccountInfo);


  return Dados;
  }

Classe Generic.vs
[ tem um metodo que me devolve o valor de um determinado Header referente ao serviço]

Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ServiceModel.Web;
using System.Net;

namespace RestService
{
  public static class Generic
  {

  public static string GetValueHeader(string headerText)
  {
  string ValueHeader = string.Empty;

  try
  {
  IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest;
  WebHeaderCollection headers = request.Headers;

  ValueHeader = headers[headerText];

  return ValueHeader == null ? string.Empty : ValueHeader;
  }
  catch
  {
  return string.Empty;
  }


  }

  }
}


IRestServiceImpl.cs
[interface da chamada da função acima]


Código:
using System.ServiceModel;
using System.ServiceModel.Web;

namespace RestService
{
   
  [ServiceContract]
  public interface IRestServiceImpl
  {
   




  [OperationContract]
  [WebInvoke(Method = "POST", UriTemplate = "/GetJson", ResponseFormat = WebMessageFormat.Json)]

  string GetJson();

  }
}


WebTest.RestService
[Projecto web de teste de debug do web service]

Tem uma refeência ao nosso serviço

Código:
protected void btnTestar_Click(object sender, EventArgs e)
  {
  RestServiceImplClient broker = new RestServiceImplClient();[/B]


  //using (RestServiceImplClient client = new RestServiceImplClient())
  //{
  //  using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
  //  {
  //  OperationContext.Current.IncomingMessageHeaders.Add(header);

  //  HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
  //  httpRequestProperty.Headers.Add("myCustomHeader", "Custom Happy Value.");
  //  httpRequestProperty.Headers.Add(HttpRequestHeader.UserAgent, "my user agent");
  //  OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = //httpRequestProperty;

  //  }
  //}

  broker.GetJson();

  }
___________________________________________________________

consigo fazer debug ao serviço entrar na função Getjson.

o meu objectivo é inserir novos valores de header no rest service em causa

ja ando a um a 2 dias nisto farto de procurar no google , mas não encontro nehuma solução que me resolva este problema.

Agradecia uma ajuda

obrigado
 
Back
Topo