0

I'm creating a WCF service that is going to live on a separate server than the website's that are calling it. The problem I'm running into revolves around getting context information from the browser and server.

As a little background, the application I'm writing used to exist as a simple assembly on the server that was called to collect some custom web analytics, and leaned heavily on HttpContext to retrieve cookies, querystring information, and server variables.

I've resigned myself to passing all of these things to my service as text via an AJAX call, but I can't help but feel like I'm doing it wrong.

Is there a better way to pass this information to my service?

UPDATE:

So, after looking at the original application, I've decided to take another approach. The current assembly only references five cookies, so I'm probably going to simply take those and define a data contract that includes these values and the values of the server variables that I need to use the service. I'm still going to pass in the entire query string and simply create a HttpRequest object to access those values since it is used more heavily throughout the application.

I'll send all of this up to the service in a JSON wrapper and use a builder class to create the analytic object in the service application.

I think this is a better solution - what do you think?

elucid8
  • 1,412
  • 4
  • 19
  • 40
  • When you say 'text via AJAX', do you mean a single string or JSON? – Channs Aug 09 '12 at 15:25
  • @channs I was going to pass it in just like a web method. This is the operation contract... **Sub Execute(ByVal Cookies As String, HTTPReferrer As String, HTTPXForwardedFor As String, HTTPForwardedServer As String, HTTPRewriteURL As String, PathInfo As String, QueryString As String, RemoteAddress As String, ScriptName As String, ServerName As String, URL As String)** – elucid8 Aug 09 '12 at 15:45
  • And do you make the call to WCF from the browser ($.ajax) or is that in the code-behind? – Channs Aug 09 '12 at 16:05
  • @channs The WCF service will always be called from the browser. – elucid8 Aug 09 '12 at 16:16

1 Answers1

0

Suggest using the OperationContext.Current property (MSDN link here) in your WCF service to obtain the incoming request details.

References:

  • I was digging around online and this SO post provided a good start (I upvoted it!).

  • This MSDN thread explains how to extract the cookie from OperationContext.

Hope this helps. I haven't tried this yet, so cannot guarantee it works.

p.s: If this approach works, your new OperationContract should have zero parameters.

Community
  • 1
  • 1
Channs
  • 2,091
  • 1
  • 15
  • 20
  • I am going to look into this right now. I had ruled out using any context whatsoever, but this looks very promising. I'll keep you updated! If I could upvote you, I totally would. – elucid8 Aug 09 '12 at 16:51