zoukankan      html  css  js  c++  java
  • 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);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

     

     

     

     

  • 相关阅读:
    数据结构(四十七)归并排序(O(nlogn))
    数据结构(四十六)插入排序(1.直接插入排序(O(n²)) 2.希尔排序(O(n3/2)))
    数据结构(四十五)选择排序(1.直接选择排序(O(n²))2.堆排序(O(nlogn)))
    数据结构(四十四)交换排序(1.冒泡排序(O(n²))2.快速排序(O(nlogn))))
    数据结构(四十三)排序的基本概念与分类
    策略模式(strategy pattern)
    多线程同步之读者写者问题
    多线程同步之信号量
    多线程同步之条件变量
    多线程同步之互斥量
  • 原文地址:https://www.cnblogs.com/tiancai/p/13528153.html
Copyright © 2011-2022 走看看