Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ASP.NET网站中托管的WCF服务_Wcf - Fatal编程技术网

使用ASP.NET网站中托管的WCF服务

使用ASP.NET网站中托管的WCF服务,wcf,Wcf,我得到了一个在ASP.NET网站上托管的WCF服务。只有当有人登录该网站时,该服务才可用。WCF服务使用webHttp绑定。现在我需要从其他M/c的控制台应用程序中使用服务。我有登录网站的身份验证凭据(用户名/密码)。是否有其他方法可以使用凭据从控制台应用程序使用服务?作为先决条件,我不能在服务端更改任何内容。这种技术对我有效,因为使用表单身份验证的页面中的代码正在调用我们的WCF服务来进行实际的登录处理,即我们已经签订了操作合同 string address = "http://loc

我得到了一个在ASP.NET网站上托管的WCF服务。只有当有人登录该网站时,该服务才可用。WCF服务使用webHttp绑定。现在我需要从其他M/c的控制台应用程序中使用服务。我有登录网站的身份验证凭据(用户名/密码)。是否有其他方法可以使用凭据从控制台应用程序使用服务?作为先决条件,我不能在服务端更改任何内容。

这种技术对我有效,因为使用表单身份验证的页面中的代码正在调用我们的WCF服务来进行实际的登录处理,即我们已经签订了
操作合同

    string address = "http://localhost:4567";
    var serviceClient = new SomeService.MyServiceClient(
        "BasicHttpBinding_IMyService", address + "/myservice.svc");

    // Call the service login method, save off the response's cookie(s)
    string cookiesFromLogin = string.Empty;
    bool logonSucceeded = false;
    using (new OperationContextScope(serviceClient.InnerChannel))
    {
        logonSucceeded = serviceClient.DoTheLogin("userName", "userPass");

        var httpResponse = (HttpResponseMessageProperty)
            OperationContext.Current.IncomingMessageProperties[
                HttpResponseMessageProperty.Name];
        cookiesFromLogin = httpResponse.Headers["Set-Cookie"];
    }

    // Then later when you need to make other service calls, insert the cookie(s)
    // into the request headers
    using (new OperationContextScope(serviceClient.InnerChannel))
    {
        var httpRequest = new HttpRequestMessageProperty();
        httpRequest.Headers["Cookie"] = cookiesFromLogin;
        OperationContext.Current.OutgoingMessageProperties[
            HttpRequestMessageProperty.Name] = httpRequest;

        var someResults = serviceClient.CallSomeMethod("param1");
    }

WCF服务实现的任何部分是否使用
System.Web.HttpContext
(传统Web会话)?您是否正在使用ASP.NET窗体身份验证?如果是这样,那么console应用程序将需要模拟web浏览器,并在所有WCF请求上反射回cookie。如果是这样的话,我可以提供一些代码来说明。症状是,控制台将使用良好的身份验证成功登录,但在其他WCF请求上将失败,因为服务器端将获得null
HttpContext
。您好,您是正确的。该网站正在使用表单身份验证。在我的情况下,我无法使用凭据调用服务。我的理解是,由于网站正在使用表单身份验证,除了凭据之外,我们还需要Cookie信息。但是,我不知道,我如何才能获得网站使用过的Cookie信息。请按照您所说的提供一些代码。