MetadataSamples.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. //
  2. // MetadataProvider.cs
  3. //
  4. // Author:
  5. // Martin Baulig <[email protected]>
  6. //
  7. // Copyright (c) 2012 Xamarin Inc. (http://www.xamarin.com)
  8. //
  9. // Permission is hereby granted, free of charge, to any person obtaining a copy
  10. // of this software and associated documentation files (the "Software"), to deal
  11. // in the Software without restriction, including without limitation the rights
  12. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  13. // copies of the Software, and to permit persons to whom the Software is
  14. // furnished to do so, subject to the following conditions:
  15. //
  16. // The above copyright notice and this permission notice shall be included in
  17. // all copies or substantial portions of the Software.
  18. //
  19. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  20. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  22. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  23. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  24. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  25. // THE SOFTWARE.
  26. using System;
  27. using System.IO;
  28. using System.Reflection;
  29. using System.ServiceModel;
  30. using System.ServiceModel.Security;
  31. using System.ServiceModel.Channels;
  32. using System.ServiceModel.Description;
  33. using System.ServiceModel.Configuration;
  34. using WS = System.Web.Services.Description;
  35. namespace MonoTests.System.ServiceModel.MetadataTests {
  36. public static class MetadataSamples {
  37. internal const string HttpUri = "http://tempuri.org/TestHttp/";
  38. internal const string HttpsUri = "https://tempuri.org/TestHttps/";
  39. internal const string NetTcpUri = "net-tcp://tempuri.org:8000/TestNetTcp/";
  40. internal const string CustomUri = "custom://tempuri.org:8000/Test/";
  41. [MetadataSample]
  42. public static MetadataSet BasicHttp ()
  43. {
  44. var exporter = new WsdlExporter ();
  45. var cd = new ContractDescription ("MyContract");
  46. exporter.ExportEndpoint (new ServiceEndpoint (
  47. cd, new BasicHttpBinding (), new EndpointAddress (HttpUri)));
  48. var doc = exporter.GetGeneratedMetadata ();
  49. return doc;
  50. }
  51. [MetadataSample]
  52. public static MetadataSet BasicHttp_TransportSecurity ()
  53. {
  54. var exporter = new WsdlExporter ();
  55. var cd = new ContractDescription ("MyContract");
  56. var binding = new BasicHttpBinding ();
  57. binding.Security.Mode = BasicHttpSecurityMode.Transport;
  58. exporter.ExportEndpoint (new ServiceEndpoint (
  59. cd, binding, new EndpointAddress (HttpUri)));
  60. var doc = exporter.GetGeneratedMetadata ();
  61. return doc;
  62. }
  63. [MetadataSample]
  64. public static MetadataSet BasicHttp_MessageSecurity ()
  65. {
  66. var exporter = new WsdlExporter ();
  67. var cd = new ContractDescription ("MyContract");
  68. var binding = new BasicHttpBinding ();
  69. binding.Security.Mode = BasicHttpSecurityMode.Message;
  70. binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
  71. exporter.ExportEndpoint (new ServiceEndpoint (
  72. cd, binding, new EndpointAddress (HttpUri)));
  73. var doc = exporter.GetGeneratedMetadata ();
  74. return doc;
  75. }
  76. [MetadataSample]
  77. public static MetadataSet BasicHttp_TransportWithMessageCredential ()
  78. {
  79. var exporter = new WsdlExporter ();
  80. var cd = new ContractDescription ("MyContract");
  81. var binding = new BasicHttpBinding ();
  82. binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
  83. exporter.ExportEndpoint (new ServiceEndpoint (
  84. cd, binding, new EndpointAddress (HttpUri)));
  85. var doc = exporter.GetGeneratedMetadata ();
  86. return doc;
  87. }
  88. [MetadataSample]
  89. public static MetadataSet BasicHttp_Mtom ()
  90. {
  91. var exporter = new WsdlExporter ();
  92. var cd = new ContractDescription ("MyContract");
  93. var binding = new BasicHttpBinding ();
  94. binding.MessageEncoding = WSMessageEncoding.Mtom;
  95. exporter.ExportEndpoint (new ServiceEndpoint (
  96. cd, binding, new EndpointAddress (HttpUri)));
  97. var doc = exporter.GetGeneratedMetadata ();
  98. return doc;
  99. }
  100. [MetadataSample]
  101. public static MetadataSet BasicHttp_NtlmAuth ()
  102. {
  103. var exporter = new WsdlExporter ();
  104. var cd = new ContractDescription ("MyContract");
  105. var binding = new BasicHttpBinding (BasicHttpSecurityMode.TransportCredentialOnly);
  106. binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
  107. exporter.ExportEndpoint (new ServiceEndpoint (
  108. cd, binding, new EndpointAddress (HttpUri)));
  109. var doc = exporter.GetGeneratedMetadata ();
  110. return doc;
  111. }
  112. #if FIXME && NET_4_5
  113. [MetadataSample]
  114. public static MetadataSet BasicHttps ()
  115. {
  116. var exporter = new WsdlExporter ();
  117. var cd = new ContractDescription ("MyContract");
  118. exporter.ExportEndpoint (new ServiceEndpoint (
  119. cd, new BasicHttpsBinding (), new EndpointAddress (HttpsUri)));
  120. var doc = exporter.GetGeneratedMetadata ();
  121. return doc;
  122. }
  123. [MetadataSample]
  124. public static MetadataSet BasicHttps_NtlmAuth ()
  125. {
  126. var exporter = new WsdlExporter ();
  127. var cd = new ContractDescription ("MyContract");
  128. var binding = new BasicHttpsBinding ();
  129. binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
  130. exporter.ExportEndpoint (new ServiceEndpoint (
  131. cd, binding, new EndpointAddress (HttpsUri)));
  132. var doc = exporter.GetGeneratedMetadata ();
  133. return doc;
  134. }
  135. [MetadataSample]
  136. public static MetadataSet BasicHttps_Certificate ()
  137. {
  138. var exporter = new WsdlExporter ();
  139. var cd = new ContractDescription ("MyContract");
  140. var binding = new BasicHttpsBinding ();
  141. binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
  142. exporter.ExportEndpoint (new ServiceEndpoint (
  143. cd, binding, new EndpointAddress (HttpsUri)));
  144. var doc = exporter.GetGeneratedMetadata ();
  145. return doc;
  146. }
  147. [MetadataSample]
  148. public static MetadataSet BasicHttps_TransportWithMessageCredential ()
  149. {
  150. var exporter = new WsdlExporter ();
  151. var cd = new ContractDescription ("MyContract");
  152. var binding = new BasicHttpsBinding (BasicHttpsSecurityMode.TransportWithMessageCredential);
  153. exporter.ExportEndpoint (new ServiceEndpoint (
  154. cd, binding, new EndpointAddress (HttpsUri)));
  155. var doc = exporter.GetGeneratedMetadata ();
  156. return doc;
  157. }
  158. #endif
  159. [MetadataSample]
  160. public static MetadataSet NetTcp ()
  161. {
  162. var exporter = new WsdlExporter ();
  163. var cd = new ContractDescription ("MyContract");
  164. exporter.ExportEndpoint (new ServiceEndpoint (
  165. cd, new NetTcpBinding (SecurityMode.None, false),
  166. new EndpointAddress (NetTcpUri)));
  167. var doc = exporter.GetGeneratedMetadata ();
  168. return doc;
  169. }
  170. [MetadataSample]
  171. public static MetadataSet NetTcp_TransportSecurity ()
  172. {
  173. var exporter = new WsdlExporter ();
  174. var cd = new ContractDescription ("MyContract");
  175. exporter.ExportEndpoint (new ServiceEndpoint (
  176. cd, new NetTcpBinding (SecurityMode.Transport, false),
  177. new EndpointAddress (NetTcpUri)));
  178. var doc = exporter.GetGeneratedMetadata ();
  179. return doc;
  180. }
  181. [MetadataSample]
  182. public static MetadataSet NetTcp_MessageSecurity ()
  183. {
  184. var exporter = new WsdlExporter ();
  185. var cd = new ContractDescription ("MyContract");
  186. exporter.ExportEndpoint (new ServiceEndpoint (
  187. cd, new NetTcpBinding (SecurityMode.Message, false),
  188. new EndpointAddress (NetTcpUri)));
  189. var doc = exporter.GetGeneratedMetadata ();
  190. return doc;
  191. }
  192. [MetadataSample]
  193. public static MetadataSet NetTcp_TransportWithMessageCredential ()
  194. {
  195. var exporter = new WsdlExporter ();
  196. var cd = new ContractDescription ("MyContract");
  197. exporter.ExportEndpoint (new ServiceEndpoint (
  198. cd, new NetTcpBinding (SecurityMode.TransportWithMessageCredential, false),
  199. new EndpointAddress (NetTcpUri)));
  200. var doc = exporter.GetGeneratedMetadata ();
  201. return doc;
  202. }
  203. [MetadataSample]
  204. public static MetadataSet NetTcp_ReliableSession ()
  205. {
  206. var exporter = new WsdlExporter ();
  207. var cd = new ContractDescription ("MyContract");
  208. var binding = new NetTcpBinding (SecurityMode.None, true);
  209. exporter.ExportEndpoint (new ServiceEndpoint (
  210. cd, binding, new EndpointAddress (NetTcpUri)));
  211. var doc = exporter.GetGeneratedMetadata ();
  212. return doc;
  213. }
  214. [MetadataSample]
  215. public static MetadataSet NetTcp_TransferMode ()
  216. {
  217. var exporter = new WsdlExporter ();
  218. var cd = new ContractDescription ("MyContract");
  219. var binding = new NetTcpBinding (SecurityMode.None, false);
  220. binding.TransferMode = TransferMode.Streamed;
  221. exporter.ExportEndpoint (new ServiceEndpoint (
  222. cd, binding, new EndpointAddress (NetTcpUri)));
  223. var doc = exporter.GetGeneratedMetadata ();
  224. return doc;
  225. }
  226. public static void Export ()
  227. {
  228. var bf = BindingFlags.Public | BindingFlags.Static;
  229. foreach (var method in typeof (MetadataSamples).GetMethods (bf)) {
  230. MetadataSampleAttribute sampleAttr = null;
  231. foreach (var obj in method.GetCustomAttributes (false)) {
  232. var cattr = obj as MetadataSampleAttribute;
  233. if (cattr != null) {
  234. sampleAttr = cattr;
  235. break;
  236. }
  237. }
  238. if (sampleAttr == null)
  239. continue;
  240. var name = sampleAttr.Name ?? method.Name;
  241. var doc = (MetadataSet)method.Invoke (null, null);
  242. TestContext.SaveMetadata (name, doc);
  243. }
  244. }
  245. public static MetadataSet GetMetadataByName (string name)
  246. {
  247. if (name.EndsWith (".xml"))
  248. name = name.Substring (name.Length - 4);
  249. var bf = BindingFlags.Public | BindingFlags.Static;
  250. foreach (var method in typeof (MetadataSamples).GetMethods (bf)) {
  251. MetadataSampleAttribute sampleAttr = null;
  252. foreach (var obj in method.GetCustomAttributes (false)) {
  253. var cattr = obj as MetadataSampleAttribute;
  254. if (cattr != null) {
  255. sampleAttr = cattr;
  256. break;
  257. }
  258. }
  259. if (sampleAttr == null)
  260. continue;
  261. if (!name.Equals (sampleAttr.Name ?? method.Name))
  262. continue;
  263. return (MetadataSet)method.Invoke (null, null);
  264. }
  265. throw new InvalidOperationException ();
  266. }
  267. public class MetadataSampleAttribute : Attribute {
  268. public MetadataSampleAttribute ()
  269. {
  270. }
  271. public MetadataSampleAttribute (string name)
  272. {
  273. Name = name;
  274. }
  275. public string Name {
  276. get; set;
  277. }
  278. }
  279. }
  280. }