• WebService asmx生成的wsdl 修改 location


    C#中使用webservice接口的时候,返给服务器的IP地址是带上了端口号的。但是有时候不能要那个端口(比如用nginx做了转发),就需要在服务端处理一下(处理内容就是后面的代码)。此外,需要在配置文件中web.config中的system.web中添加一些东西:

    <webServices>

    <protocols>

    <add name="HttpGet"/>

    <add name="HttpPost"/>

    <add name="HttpSoap"/>

    </protocols>

    <soapExtensionReflectorTypes>

    <add type="CommMethod.OuterPortReflector,CommMethod"/>

    </soapExtensionReflectorTypes>

    </webServices>

    注:1.type内容是类名,包名。这一点和msdn上的那个人写的有些不同(有可能是版本的问题)(http://blogs.msdn.com/b/kaevans/archive/2005/11/16/493496.aspx)。

             2.如果没有protocols中的内容的话,有可能post和get请求不能被正确识别(未做过验证,只是在博客园上看见过类似问题)。

             3.stackoverflow源地址:http://stackoverflow.com/questions/1531448/asp-net-web-service-changes-port-on-invoke

     

    代码:

    //-----------------------------------------------------------------------
    // <copyright file="OuterPortReflector.cs" company="">
    // * Copyright (C)
    // * version :
    // * author  : ying83811
    // * FileName: OuterPortReflector.cs
    // * history : created by ying83811
    // </copyright>
    //-----------------------------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web.Services.Description;

    namespace Better517Na.KoreaProductInterface.CommMethod
    {
        /// <summary>
        /// OuterPortReflector类
        /// </summary>
        public class OuterPortReflector : SoapExtensionReflector
        {
            /// <summary>
            /// 重写ReflectMethod
            /// </summary>
            public override void ReflectMethod()
            {
            }

            /// <summary>
            /// 重写ReflectDescription
            /// </summary>
            public override void ReflectDescription()
            {

                //  为了说明问题,这里直接把端口号写死了,建议写在配置文件中
                string portNum = "8888";

                portNum = ":" + portNum;
                ServiceDescription description = ReflectionContext.ServiceDescription;
                foreach (Service service in description.Services)
                {
                    foreach (Port port in service.Ports)
                    {
                        foreach (ServiceDescriptionFormatExtension extension in port.Extensions)
                        {
                            SoapAddressBinding binding = extension as SoapAddressBinding;
                            if (null != binding)
                            {
                                binding.Location = binding.Location.Replace(portNum, string.Empty);
                            }
                            else
                            {
                                HttpAddressBinding httpBinding = extension as HttpAddressBinding;
                                if (httpBinding != null)
                                {

       binding.Location = "https://baidu.com";
                                    httpBinding.Location = httpBinding.Location.Replace(portNum, string.Empty);
                                }
                                else
                                {

       binding.Location = "https://baidu.com";
                                    Soap12AddressBinding soap12Binding = extension as Soap12AddressBinding;
                                    if (soap12Binding != null)
                                    {
                                        soap12Binding.Location = soap12Binding.Location.Replace(portNum, string.Empty);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

     

     

     

     

  • 相关阅读:
    css清除select默认的样式
    网站性能优化的方法--Yahoo
    jQuery写toTop(回到顶部)效果
    jquery的addClass、removeClass、toggleClass方法
    css选择器汇总
    日期对象的正确写法
    顶会热词统计
    《人月神话》读后感二
    新闻详情页实现
    第八周总结
  • 原文地址:https://www.cnblogs.com/tiancai/p/13528153.html
Copyright © 2020-2023  润新知