从自托管服务中使用HTTP POST

时间:2012-11-12 19:37:27

标签: c# .net wcf wcf-binding self-hosting

我有一个需要监听upload notifications coming from a BITS server的自托管服务(它们是一个带有自定义标头的简单HTTP POST请求)。如果我不是自己托管我的服务并使用IIS,我只会创建一个ASPX页面,我可以处理传入的请求,但我使用自托管的WCF,我无法切换到IIS。

我查看了使用WebInvokeAttribute,但这似乎只是用于发送JSON或XML作为回复,我需要遵循协议规范。此外,我没有看到拉出自定义标题的方法。

我接下来要做的就是HttpListener它似乎做了我需要的事情,但我没有看到是否有办法通过我的app.config文件配置它,就像普通的WCF端点一样。 / p>

我只是将地址添加到我的applicationSettings部分,还是有更好的方法来实现我想要做的事情?

1 个答案:

答案 0 :(得分:2)

我最后只使用了Properties类并将url存储在那里。

//This is run on it's own thread
HttpListener listener = new HttpListener();
listener.Prefixes.Add(Properties.Settings.Default.BitsReplierAddress);
listener.Start();

while (_running)
{
    // Note: The GetContext method blocks while waiting for a request. 
    // Could be done with BeginGetContext but I was having trouble 
    // cleanly shutting down
    HttpListenerContext context = listener.GetContext();
    HttpListenerRequest request = context.Request;

    var requestUrl = request.Headers["BITS-Original-Request-URL"];
    var requestDatafileName = request.Headers["BITS-Request-DataFile-Name"];

    //(Snip...) Deal with the file that was uploaded
}

listener.Stop();