更改WCF wsdl中的默认消息名称

时间:2013-08-06 01:34:27

标签: wcf

我使用DataContract创建了一个WCF服务应用程序,该服务正在生成自己的默认消息名称。我的服务正由Java客户端使用,我必须摆脱这些默认的消息名称,因为它导致基于这些长名称生成Java代理类。

wsdl:message name =“ MyService-v1-1_Login_InputMessage

wsdl:part name =“parameters”element =“tns:Login”

的wsdl:消息

wsdl:message name =“ MyService-v1-1_Login_OutputMessage

wsdl:part name =“parameters”element =“tns:LoginResponse”

的wsdl:消息

wsdl:message name =“ MyService-v1-1_Login_ServiceFault_FaultMessage

wsdl:part name =“detail”element =“tns:ServiceFault”

1 个答案:

答案 0 :(得分:1)

您可以使用IWsdlExportExtension来控制它。请参阅msdn上的示例:http://msdn.microsoft.com/en-us/library/system.servicemodel.description.iwsdlexportextension.aspx

相关代码

            // Get parameter information.
            ParameterInfo[] args = op.SyncMethod.GetParameters();
            for (int i = 0; i < args.Length; i++)
            {
              object[] docAttrs 
                = args[i].GetCustomAttributes(typeof(WsdlParameterDocumentationAttribute), false);
              if (docAttrs.Length != 0)
              {
                // <param name="Int1">Text.</param>
                XmlElement newParamElement = opOwner.CreateElement("param");
                XmlAttribute paramName = opOwner.CreateAttribute("name");
                paramName.Value = args[i].Name;
                newParamElement.InnerText 
                  = ((WsdlParameterDocumentationAttribute)docAttrs[0]).ParamComment;
                newParamElement.Attributes.Append(paramName);
                operation.DocumentationElement.AppendChild(newParamElement);
              }
            }