Created
March 28, 2013 02:30
-
-
Save ElliotWood/5260048 to your computer and use it in GitHub Desktop.
Here is what I did... Web App with signalR .net4.0, then your SharePoint Web App .net 2. Add this to the global.asax in your Signalr project RouteTable.Routes.MapHttpHandlerRoute("spproxy","spproxy/{*operation}", new SharePointRProxyHandler());
If you want to raise an event from SharePoint you can do a http POST to this new route URL for example…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Web; | |
namespace System.Web.Routing | |
{ | |
public class HttpHandlerRoute : IRouteHandler | |
{ | |
private String _virtualPath = null; | |
private IHttpHandler _handler = null; | |
public HttpHandlerRoute(String virtualPath) | |
{ | |
_virtualPath = virtualPath; | |
} | |
public HttpHandlerRoute(IHttpHandler handler) | |
{ | |
_handler = handler; | |
} | |
public IHttpHandler GetHttpHandler(RequestContext requestContext) | |
{ | |
IHttpHandler result; | |
if (_handler == null) | |
{ | |
result = (IHttpHandler)System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(_virtualPath, typeof(IHttpHandler)); | |
} | |
else | |
{ | |
result = _handler; | |
} | |
return result; | |
} | |
} | |
public static class RoutingExtensions | |
{ | |
public static void MapHttpHandlerRoute(this RouteCollection routes, string routeName, string routeUrl, string physicalFile, RouteValueDictionary defaults = null, RouteValueDictionary constraints = null) | |
{ | |
var route = new Route(routeUrl, defaults, constraints, new HttpHandlerRoute(physicalFile)); | |
RouteTable.Routes.Add(routeName, route); | |
} | |
public static void MapHttpHandlerRoute(this RouteCollection routes, string routeName, string routeUrl, IHttpHandler handler, RouteValueDictionary defaults = null, RouteValueDictionary constraints = null) | |
{ | |
var route = new Route(routeUrl, defaults, constraints, new HttpHandlerRoute(handler)); | |
RouteTable.Routes.Add(routeName, route); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Or you could just post directly to a httphandler and get the handler to do a connection.Broadcast | |
namespace SharePointRProxy | |
{ | |
/// <summary> | |
/// Summary description for SharePointRProxyHandler | |
/// </summary> | |
public class SharePointRProxyHandler : IHttpHandler | |
{ | |
public void ProcessRequest(HttpContext context) | |
{ | |
context.Response.ContentType = "text/plain"; | |
IConnectionManager connectonManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>(); | |
IConnection connection = connectonManager.GetConnection<MyConnection>(); | |
object payload = null; //Add payload here 'context.Request.Params["data"] ?' | |
JavaScriptSerializer jss = new JavaScriptSerializer(); | |
var payloadJSON = jss.Serialize(payload); | |
connection.Broadcast(payloadJSON); | |
} | |
public bool IsReusable | |
{ | |
get | |
{ | |
return false; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment