2012-10-03 16 views
6

मैं विंडोज 8 ऐप लिख रहा हूं। (विज़िअल स्टूडियो 2012 पर) जो मेरी डब्ल्यूसीएफ सेवा का उपयोग करता है। जब मैं अपने घर पर कोशिश करता हूं तो यह अच्छी तरह से काम करता है, इसलिए यह डब्ल्यूसीएफ से कनेक्ट हो सकता है। लेकिन जब मैं अपने कार्यालय में की कोशिश की, यह WCF कनेक्ट नहीं कर सकता और त्रुटि देता है:"रिमोट सर्वर ने एक त्रुटि लौटा दी: (417) उम्मीद विफल।"

The remote server returned an error: (417) Expectation Failed.

मैं अपने फ़ायरवॉल द्वारा के कारण कार्यालय नेटवर्क में लगता है .. बहुत अधिक Google पर, अभी भी यहाँ हालांकि समस्या का एक बहुत कोशिश की ।

.. काम नहीं करता क्योंकि .Net Framework 4.5 नहीं ServicePointManager क्लास है, लेकिन MSDN कहते हैं ServicePointManager नेट 4.5 पर है 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 ऐप में ये फ़ाइलें नहीं हैं ..

कुछ लोगों ने वीएस 2012 की devenv.exe.config फ़ाइल में कोड के ऊपर लिखा था। मैंने कोशिश की लेकिन कुछ भी नहीं बदला।

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

+2

मैंने यह त्रुटि पहले देखी है जब मेरी वेब सेवाओं की कॉल प्रॉक्सी द्वारा अवरुद्ध हो रही थी – lockstock

उत्तर

1

ठीक है, आप सवाल here तैनात है, और Can Bilgin एक जवाब दे दी है। मैं इसे यहां उन लोगों के लिए पोस्ट करता हूं जिनके पास आपकी समस्या है।

I think it should be possible to add the header manually... I would give it a go with the operationscope... from an earlier example:

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); 
    } 
} 

cause on the http requests with the httpclient you can do something like (again from an earlier example):

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(); 
0

संदर्भ के लिए, के बाद एक बाकी वेब सेवा करने के लिए एक JSON अनुरोध पोस्ट करने के लिए WebClient का उपयोग करने का एक पूर्ण उदाहरण है। यह 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; } 
} 
0

config करने के लिए एक सेटिंग के रूप में इस लाइन
() जोड़ने प्रारंभिक त्रुटि तुम अब भी मिलने की संभावना है ठीक कर सकता है हालांकि (504) गेटवे समय समाप्त अपनी प्रॉक्सी सेटिंग आप सही उपयोग करने की अनुमति नहीं कर रहे हैं, तो लक्ष्य सर्वर पर आपके लिए खुला खुला बंदरगाह। जिस सर्वर को आप भेज रहे हैं, उसके लिए प्रॉक्सी अपवाद जोड़ने के लिए, इसे इंटरनेट एक्सप्लोरर के माध्यम से कनेक्शन टैब पर प्रॉक्सी बहिष्करण के रूप में जोड़ें -> LAN सेटिंग्स -> उन्नत। मुझे उम्मीद है कि आप तब कनेक्ट करने में सक्षम होंगे।

संबंधित मुद्दे

 संबंधित मुद्दे