Это означает, что вы тестируете, оцениваете или распечатываете переменную, которой вы еще ничего не присвоили. Это означает, что у вас либо опечатка, либо вам нужно сначала проверить, что переменная была инициализирована. Проверьте ваши логические пути, они могут быть установлены в одном пути, но не в другом.
Откуда берутся эти имена пользователей и пароли? Если на вашем веб-сайте уже реализована проверка подлинности с помощью форм, вы можете самостоятельно обойти настройку учетных данных и использовать файл cookie проверки подлинности с помощью форм. Если ваши пользователи вошли в систему, файл cookie будет перемещаться вместе с вызовом веб-службы. Чтобы прочитать его с другой стороны, вам нужно внести пару изменений.
Сначала вам нужно включить режим совместимости ASP.NET для WCF в разделе system.ServiceModel:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
Как только это будет сделано, затем для каждого метод службы, который вы хотите понять, файл cookie ASP.NET, добавьте атрибут [AspNetCompatibilityRequirements] в свой класс службы
[ServiceContract]
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ExampleService
{
}
. Теперь в каждом методе вы можете получить доступ к объекту HttpContext.Current.User.Identity для определения личности пользователя.
вы можете передать какой-то объект аутентификации и зашифровать его на уровне сообщения с помощью WCF. Затем можно использовать аспекты C # ( http://www.postsharp.org/ ), чтобы избежать избыточной логики. Это очень чистый способ обращения с ним.
Не сворачивайте свои собственные и не добавляйте явные параметры - это действительно слишком много!
Ознакомьтесь с функциями безопасности WCF - их много! Вы можете, например, защитить сообщение и включить в него учетные данные - все сразу же, никакого дополнительного кодирования с вашей стороны не требуется!
Ознакомьтесь с этой отличной статьей о безопасности WCF, написанной Мишель Леру Бустаманте: http: // www.devx.com/codemag/Article/33342
В вашем случае я бы предложил безопасность сообщений с учетными данными имени пользователя - вам нужно настроить это на обоих концах:
На стороне сервера:
<bindings>
<basicHttpBinding>
<binding name="SecuredBasicHttp" >
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="YourService">
<endpoint address="http://localhost:8000/MyService"
binding="basicHttpBinding"
bindingConfiguration="SecuredBasicHttp"
contract="IYourService" />
</service>
</services>
И вы необходимо применить те же настройки на стороне клиента:
<bindings>
<basicHttpBinding>
<binding name="SecuredBasicHttp" >
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:8000/MyService"
binding="basicHttpBinding"
bindingConfiguration="SecuredBasicHttp"
contract="IYourService" />
</client>
Теперь ваш сервер и клиент согласны с безопасностью - на клиенте вы должны указать имя пользователя и пароль для использования следующим образом:
YourServiceClient client = new YourServiceClient();
client.ClientCredentials.UserName.UserName = "your user name";
client.ClientCredentials.UserName.Password = "top$secret";
На стороне сервера , ты' Вам потребуется настроить способ проверки этих учетных данных пользователя - обычно либо по домену Windows (Active Directory), либо по модели поставщика членства ASP.NET. В любом случае, если учетные данные пользователя не могут быть проверены в том хранилище, которое вы определяете, вызов будет отклонен.
Надеюсь, это немного поможет - безопасность - большая тема в WCF и имеет много-много опций - это может быть немного пугающе, но, в конце концов, обычно это имеет смысл! : -)
Марк
Надеюсь, это немного поможет - безопасность - важная тема в WCF, и у нее много-много вариантов - это может быть немного пугающе, но, в конце концов, обычно это имеет смысл! : -)
Марк
Надеюсь, это немного поможет - безопасность - это большая тема в WCF, и у нее есть много-много вариантов - это может быть немного пугающе, но, в конце концов, обычно это имеет смысл! : -)
Марк