Advertisement
Guest User

Untitled

a guest
Mar 6th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.91 KB | None | 0 0
  1. <system.serviceModel>
  2.  
  3. <bindings>
  4. <basicHttpBinding>
  5. <binding name="WsdlPortSoap111">
  6. <security mode="TransportCredentialOnly">
  7. <transport clientCredentialType="Basic" />
  8. </security>
  9. </binding>
  10. </basicHttpBinding>
  11. </bindings>
  12. <client>
  13. <endpoint address="http://iais-test.kemsu.ru:80/DekanatService-0_1_1/ws"
  14. binding="basicHttpBinding" bindingConfiguration="WsdlPortSoap111"
  15. contract="kemsu.services.p.WsdlPort" name="WsdlPortSoap111">
  16. </endpoint>
  17. </client>
  18.  
  19. WsdlPortClient client;
  20. List<Specialities> specialities = new List<Specialities>();
  21. GetSpecialitiesResponse resp = new GetSpecialitiesResponse();
  22. GetSpecialitiesRequest req = new GetSpecialitiesRequest();
  23. req.institute_id = instid;
  24. resp = client.GetSpecialities(req);
  25. Diplom.kemsu.services.p.speciality[] spec = resp.list;
  26.  
  27. client = new WsdlPortClient();
  28. client.ClientCredentials.UserName.UserName = "user";
  29. client.ClientCredentials.UserName.Password = "pass";
  30.  
  31. No WS-Security header found
  32.  
  33. Описание: Необработанное исключение при выполнении текущего веб-запроса.
  34. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.
  35. Сведения об исключении: System.ServiceModel.FaultException: No WS-Security header found
  36.  
  37. [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
  38. Diplom.kemsu.services.p.GetInstitutesResponse1
  39. Diplom.kemsu.services.p.WsdlPort.GetInstitutes(Diplom.kemsu.services.p.GetInstitutesRequest1 request){
  40. return base.Channel.GetInstitutes(request);
  41. }
  42.  
  43. namespace YourProj.Infrastructure
  44. { public class InspectorBehavior : IEndpointBehavior
  45. {
  46. public string LastRequestXML
  47. {
  48. get
  49. {
  50. return myMessageInspector.LastRequestXML;
  51. }
  52. }
  53.  
  54. public string LastResponseXML
  55. {
  56. get
  57. {
  58. return myMessageInspector.LastResponseXML;
  59. }
  60. }
  61.  
  62.  
  63. private MyMessageInspector myMessageInspector = new MyMessageInspector();
  64. public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
  65. {
  66.  
  67. }
  68.  
  69. public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
  70. {
  71.  
  72. }
  73.  
  74. public void Validate(ServiceEndpoint endpoint)
  75. {
  76.  
  77. }
  78.  
  79.  
  80. public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
  81. {
  82. clientRuntime.MessageInspectors.Add(myMessageInspector);
  83. }
  84. }
  85. public class MyMessageInspector : IClientMessageInspector
  86. {
  87. public string LastRequestXML { get; private set; }
  88. public string LastResponseXML { get; private set; }
  89. public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
  90. {
  91. LastResponseXML = reply.ToString();
  92. }
  93.  
  94. public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
  95. {
  96. //LastRequestXML = request.ToString();
  97. MessageHeader messageHeadersElement = new SecurityHeader("user", "pass");
  98. request.Headers.Add(messageHeadersElement);
  99. LastRequestXML = request.ToString();
  100. return request;
  101. }
  102. }
  103. }
  104.  
  105. namespace YourProj.Infrastructure
  106. {
  107. public class SecurityHeader : System.ServiceModel.Channels.MessageHeader
  108. {
  109. public string userName;
  110. public string password;
  111. static object locker = new object();
  112. static Guid Generate15UniqueDigits()
  113. {
  114. return Guid.NewGuid();
  115. }
  116.  
  117. public SecurityHeader(string n,string p)
  118. {
  119. userName = n;
  120. password = p;
  121. }
  122.  
  123. protected override void OnWriteStartHeader(System.Xml.XmlDictionaryWriter writer, System.ServiceModel.Channels.MessageVersion messageVersion)
  124. {
  125. writer.WriteStartElement("wsse", Name, Namespace);
  126.  
  127. writer.WriteAttributeString("xmlns", "wsu", null, Namespace);
  128.  
  129. }
  130.  
  131. protected override void OnWriteHeaderContents(System.Xml.XmlDictionaryWriter writer, System.ServiceModel.Channels.MessageVersion messageVersion)
  132. {
  133. DateTime time = new DateTime();
  134. time = DateTime.UtcNow;
  135. var timeexp = time.AddMinutes(1);
  136. string Created = time.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'");
  137. string Expires = timeexp.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'");
  138.  
  139. //TimeStamp ts = new TimeStamp();
  140.  
  141.  
  142. UsernameToken userToken = new UsernameToken(userName, password, PasswordOption.SendHashed);
  143.  
  144. writer.WriteStartElement("wsse", "UsernameToken", Namespace);
  145. writer.WriteAttributeString("xmlns", "wsu", null, userToken.Id);
  146.  
  147. writer.WriteStartElement("wsse", "Username", Namespace);
  148. writer.WriteValue(userToken.Username);
  149. writer.WriteEndElement();
  150.  
  151. writer.WriteStartElement("wsse", "Password", Namespace);
  152. writer.WriteValue(userToken.Password);
  153. writer.WriteEndElement();
  154.  
  155. writer.WriteStartElement("wsse", "Nonce", Namespace);
  156. writer.WriteValue(userToken.Nonce);
  157. writer.WriteEndElement();
  158.  
  159. writer.WriteStartElement("wsu", "Created", null);
  160. writer.WriteValue(userToken.Created.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'"));
  161. writer.WriteEndElement();
  162.  
  163. Guid g = Generate15UniqueDigits();
  164.  
  165. writer.WriteEndElement();
  166. writer.WriteStartElement("wsu", "Timestamp", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
  167. writer.WriteAttributeString("wsu", "Id", null, "TS-" + g);
  168.  
  169. writer.WriteStartElement("wsu", "Created", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
  170. writer.WriteValue(Created);
  171. writer.WriteEndElement();
  172.  
  173. writer.WriteStartElement("wsu", "Expires", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
  174. writer.WriteValue(Expires);
  175. writer.WriteEndElement();
  176.  
  177. writer.WriteEndElement();
  178.  
  179. }
  180.  
  181. public override string Name
  182. {
  183. get { return "Security"; }
  184. }
  185.  
  186. public override string Namespace
  187. {
  188. get { return "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; }
  189. }
  190. }
  191. }
  192.  
  193. client = new WsdlPortClient(); // объявляем переменную порта
  194. var requestInterceptor = new InspectorBehavior(); //создаем перехватчик запроса
  195. client.Endpoint.Behaviors.Add(requestInterceptor); // добавляем перехватчик запроса, чтобы записать в header security заголовок
  196. client.ClientCredentials.UserName.UserName = "user"; // вносим имя пользователя
  197. client.ClientCredentials.UserName.Password = "pass"; // и пароль
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement