背景:本来系统在原来的服务器上待得好好的,头儿一声令下,需要将系统部署到别的服务器上,并进行发布。好吧,做吧。代码从原服务器上拷贝到现在的服务器上后,打开IIS开始进行发布吧。本以为很轻车熟路的,一会儿就搞定了。可结果,现实无情的给我了俩嘴巴子。
首先,说明一下:我们的系统服务端和客户端是分开来的,所以Services端和Client端都需要发布。
Services端
按照正常的网站发布的步骤弄好之后,网页报错如下:
当时是在服务器上,没有截图工具,只好把网页保存了一下,所以图不是很清楚
上边的内容,翻译下来,应该是:
ServiceMetadataBehavior 的 HttpsGetEnabled 属性设置为 True,而 HttpsGetUrl 属性是相对地址,但没有 https 基址。请提供 https 基址或将 HttpsGetUrl 设置为绝对地址。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidOperationException: ServiceMetadataBehavior 的 HttpsGetEnabled 属性设置为 True,而 HttpsGetUrl 属性是相对地址,但没有 https 基址。请提供 https 基址或将 HttpsGetUrl 设置为绝对地址。
源错误:
执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
刚一开始,遇到这个错误,就开始在网上查,因为原来没遇到过。后来,看到找到,说改一下IIS中的设置
在“应用程序池”中点击你所发布的系统,然后点击右边的“高级设置”
然后在“高级设置”中,选择“进程模型”中的“标识”,选择“LocalSystem”就OK了。
跟着上述的步骤弄完之后,就赶紧着重启服务,然后浏览,结果还是不行。好吧,查资料都查到外国工程师的博客了,还是不行。只好接着弄吧。
最终的解决方法:
在Services端,打开Web.config
<span style="font-family:Microsoft YaHei;font-size:18px;"> <system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors></span>
将httpsGetEnabled="true" 改为:httpsGetEnabled="false"。OK,终于成功了。
Client端
刚开始,通过与别的系统的对比以及它的提示,感觉可能是“tragetFramework”的版本过高,不是4.5的。后来,去网上查资料,基本说的也是这样的原因。不过网上的错误跟我的不一样,人家的都是4.0,而我的是4.5。“tragetFramework=4.0”的解决办法:http://blog.csdn.net/muchlin/article/details/6800863
我这版4.5的最终解决办法:打开Client端的Web.config
<span style="font-family:Microsoft YaHei;font-size:18px;"> <system.web>
<compilation debug="true" targetFramework="4.5" />
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
<httpRuntime targetFramework="4.5" />
<profile defaultProvider="DefaultProfileProvider"></span>
将<compilation debug="true" targetFramework="4.5" />中的4.5改为4.0;同时,将<httpRuntime targetFramework="4.5" />中的targetFramework="4.5"删掉。
经过自己的一番努力,在加上别人的帮助,终于把问题给解决了,内心还是很高兴的。
通过这件事,我对自身也进行了反思:要是照原来,遇到这样的问题,估计一开始就去问别人了,找个大神给解决下。但是,问题终究还是要自己弄清楚的,别人帮得了你一时,帮不了你一世。什么事情都需要自己先动手去做,这是成长的过程中,所必须的阶段。