微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WebService端口号修改

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)                             {                                 httpBinding.Location = httpBinding.Location.Replace(portNum,string.Empty);                             }                             else                             {                                 Soap12AddressBinding soap12Binding = extension as Soap12AddressBinding;                                 if (soap12Binding != null)                                 {                                     soap12Binding.Location = soap12Binding.Location.Replace(portNum,string.Empty);                                 }                             }                         }                     }                 }             }         }     } }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐