В теории, и, пока Вы сохраняете m_SomeValue
всегда равными SomeValue
(как простой метод считывания/метод set), ничто. Кроме названия переменной, выставленной WCF. (Очевидно, если Вы отметите m_
переменная, то затем Ваш прокси-класс будет также иметь тот же m_
имя. Прокси-класс генерирует общественную собственность, используете ли Вы общедоступное/защищать/внутреннее/частное поле или свойство.
Однако, если у Вас есть какая-либо специальная логика в Ваших средствах доступа, которые могут изменить возвращенное значение (ToUpper()
луг строка, например), затем Вы возвратили бы другое значение.
Если диск D является подключенным сетевым диском, вам может потребоваться использовать путь UNC:
У меня была аналогичная проблема, и я воспользовался советами из следующего сообщения в блоге, чтобы решить эту проблему:
Можете ли вы попробовать установить для заголовка User-Agent в вашем HttpWebRequest то же значение, что и IE8?
Иногда серверы не будут правильно опрашивать, если пользовательский агент не тот они ожидают.
надеются, что это поможет.
Я написал утилиту для декодирования BLOB-объектов NTLM, которые были отправлены в сеансах IE и HttpWebRequest.
Когда я смотрю на HttpWebRequest и IE, они оба запрашивают 56-битное и 128-битное шифрование из сервер. Вот дамп сеанса с использованием HttpWebRequest
==== Type1 ----
Signature: NTLMSSP
Type: 1
Flags: E20882B7
NTLMSSP_NEGOTIATE_56
NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP_NEGOTIATE_128
RESERVED2
RESERVED3
RESERVED4
NTLMSSP_REQUEST_NON_NT_SESSION_KEY
NTLMSSP_TARGET_TYPE_DOMAIN
NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED
NTLMSSP_NEGOTIATE_DATAGRAM
NTLMSSP_REQUEST_TARGET
NTLM_NEGOTIATE_OEM
NTLMSSP_NEGOTIATE_UNICODE)
Domain :
Workstation:
==== Type2 ----
Signature: NTLMSSP
Type: 2
Flags: 201
NTLMSSP_NEGOTIATE_56
NTLMSSP_REQUEST_NON_NT_SESSION_KEY)
Context: D32FDDCB:63507CFA
Вот дамп из IE:
==== Type1 ----
Signature: NTLMSSP
Type: 1
Flags: A208B207
NTLMSSP_NEGOTIATE_56
NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP_NEGOTIATE_128
NTLMSSP_REQUEST_NON_NT_SESSION_KEY
NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY
NTLMSSP_TARGET_TYPE_SHARE
NTLMSSP_TARGET_TYPE_DOMAIN
NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED
NTLMSSP_NEGOTIATE_DATAGRAM
NTLMSSP_REQUEST_TARGET
NTLMSSP_NEGOTIATE_UNICODE)
Domain : XXXX.UK
Workstation: XXX-X31
==== Type2 ----
Signature: NTLMSSP
Type: 2
Flags: 201
NTLMSSP_NEGOTIATE_56
NTLMSSP_REQUEST_NON_NT_SESSION_KEY)
Context: D32FDDCB:63507CFA
В обоих IE / HttpWebRequest они запрашивают как 64-, так и 128-битную безопасность. Однако для windows7 128-битная безопасность NTLM была сделана по умолчанию, и без этого аутентификация не удастся. Как видно из ответа сервера, сервер поддерживает только 64-битное шифрование.
По следующей ссылке обсуждается аналогичная проблема, с которой столкнулся другой человек. http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/f68e8878-53e9-4208-b589-9dbedf851198
Причина, по которой IE работает вместо управляемого приложения, заключается в что IE на самом деле не запрашивает NTLMSSP_NEGOTIATE_SEAL | NTLMSSP_NEGOTIATE_SIGN, что требует шифрования. Однако HttpWebRequest запрашивает как SEAL | SIGN. Для этого требуется 128-битное шифрование, тогда как IE инициализирует NTLMSSP (без SEAL & SIGN), он не требует шифрования. Следовательно, IE работает, а HttpWebRequest - нет. (см. ссылку выше)
Я думаю, что если вы измените свою политику безопасности, чтобы разрешить 64-битное шифрование для NTLM, ваше приложение с управляемым кодом будет работать. Или, как вариант, попросите поставщика прокси-сервера поддержать 128-битное шифрование для NTLM.
Надеюсь, это поможет.
Это способ назначения прокси?
proxy.Credentials = CredentialCache.DefaultCredentials;
Когда я последний раз использовал прокси с HttpWebRequest, он был назначен следующим образом:
Назначить прокси для запроса:
request.Proxy.Credentials = Credentials.GetProxyCredentials();
Вызов метода:
public static ICredentials GetProxyCredentials()
{
return new NetworkCredential(AppConstants.Proxy_username, AppConstants.Proxy_password);
}
Настройте прокси-сервер в web.config
<system.net>
<defaultProxy enabled="true">
<proxy
autoDetect="False"
bypassonlocal="True"
scriptLocation="http://www.proxy.pac"
proxyaddress="http://proxy1.blah.com" />
</defaultProxy>
</system.net>
Это может быть связано с тем, что находится в вашем «CredentialCache». Попробуйте вместо этого:
proxy.Credentials = new NetworkCredential("username", "pwd", "domain");
Как насчет этого:
HttpWebRequest request = HttpWebRequest.Create("http://www.yahoo.com") as HttpWebRequest;
WebProxy proxyObject = new System.Net.WebProxy("http://10.0.0.1:8080/", true); //whatever your proxy address is
proxyObject.Credentials = CredentialCache.DefaultCredentials;
request.Proxy = proxyObject;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
request.Accept = "*/*";
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream stream = response.GetResponseStream();