【问题标题】:"The remote server returned an error: (417) Expectation Failed."“远程服务器返回错误:(417) 预期失败。”
【发布时间】:2012-10-03 06:50:37
【问题描述】:

我正在编写使用我的 wcf 服务的 windows 8 应用程序。(在 Visiual Studio 2012 上)。当我在家尝试时它运行良好,因此它可以连接到 wcf。但是当我在我的办公室尝试时,它无法连接到 wcf 并返回错误:

远程服务器返回错误:(417) 预期失败。

我认为它是由办公网络中的防火墙引起的.. 谷歌搜索太多,尝试了很多,但问题仍然存在。

System.Net.ServicePointManager.Expect100Continue = false;

不起作用,因为 .Net Framework 4.5 没有 ServicePointManager 类,但 msdn 说 .Net 4.5 上有 ServicePointManager .. http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.expect100continue.aspx

<system.net>
    <settings>
        <servicePointManager expect100Continue="false" />
    </settings>
</system.net>

无法尝试在 web.config 或 app.config 上写入,因为 win8 应用程序没有这些文件..

有些人将上面的代码写入VS 2012的devenv.exe.config文件。我试过了,但没有任何改变。

http://www.jlpaonline.com/?p=176

【问题讨论】:

  • 当我的网络服务调用被代理阻止时,我已经看到了这个错误

标签: c# .net wcf firewall


【解决方案1】:

嗯,你发布了问题hereCan Bilgin 给出了答案。 我在这里发布给那些比你有问题的人。

我认为应该可以手动添加标题...我会 试一试操作范围...来自前面的示例:

Task<GetADGroupMemberResponse> AccountManagement.GetADGroupMemberAsync(GetADGroupMemberRequest request)
{
    // CB: Creating the OperationContext
    using (var scope = new OperationContextScope(this.InnerChannel))
    {
        // CB: Creating and Adding the request header
        var header = MessageHeader.CreateHeader("Server", "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", request.Server);
        OperationContext.Current.OutgoingMessageHeaders.Add(header);

        return base.Channel.GetADGroupMemberAsync(request);
    }
}

因为使用 httpclient 的 http 请求你可以做一些事情 像(同样来自前面的例子):

var httpClient = new HttpClient(); 
var httpContent = new HttpRequestMessage(HttpMethod.Post, "http://app.proceso.com.mx/win8/login");

// NOTE: Your server was returning 417 Expectation failed, 
// this is set so the request client doesn't expect 100 and continue.
httpContent.Headers.ExpectContinue = false;

var values = new List<KeyValuePair<string, string>>(); 
values.Add(new KeyValuePair<string, string>("user", "******"));
values.Add(new KeyValuePair<string, string>("pass", "******"));

httpContent.Content = new FormUrlEncodedContent(values);

HttpResponseMessage response = await httpClient.SendAsync(httpContent);

// here is the hash as string 
var result = await response.Content.ReadAsStringAsync();

【讨论】:

    【解决方案2】:

    作为参考,以下是使用 WebClient 将 JSON 请求发布到 REST Web 服务的完整示例。它将Expect100Continue 标志设置为false,如果需要,包括使用默认凭据的代理身份验证,并捕获非200 响应代码。

    void Main()
    {
        var ms = new MemoryStream();
        var ser = new DataContractJsonSerializer(typeof(Job));
        ser.WriteObject(ms, new Job { Comments = "Test", Title = "TestTitle", Id = 1 });
    
        var uri = new Uri("http://SomeRestService/Job");
        var servicePoint = ServicePointManager.FindServicePoint(uri);
        servicePoint.Expect100Continue = false;
    
        var webClient = new WebClient();
        webClient.Headers["Content-type"] = "application/json";
    
        IWebProxy defaultProxy = WebRequest.DefaultWebProxy;
        if (defaultProxy != null){
            defaultProxy.Credentials = CredentialCache.DefaultCredentials;
            webClient.Proxy = defaultProxy;
        }
    
        try {
            var result = webClient.UploadData(uri, "POST", ms.ToArray());
        } catch (WebException we) {
            var response = (HttpWebResponse)we.Response;
        }
    }
    
    [DataContract]
    public class Job
    {
        [DataMember (Name="comments", EmitDefaultValue=false)]
        public string Comments { get; set; }
        [DataMember (Name="title", EmitDefaultValue=false)]
        public string Title { get; set; }
        [DataMember (Name="id", EmitDefaultValue=false)]
        public int Id { get; set; }
    }
    

    【讨论】:

      【解决方案3】:

      虽然添加了这一行
      () 如果您的代理设置不允许您在目标服务器上使用正确的开放端口,则配置的设置可能会修复您可能仍会收到 (504) 网关超时的初始错误。要为您发送到的服务器添加代理例外,请通过 Internet Explorer 将其添加为连接选项卡上的代理排除 -> LAN 设置 -> 高级。我希望你能连接上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-18
        • 2012-06-14
        • 1970-01-01
        • 1970-01-01
        • 2012-06-27
        • 2011-07-10
        • 1970-01-01
        • 2020-12-24
        相关资源
        最近更新 更多