我有一个WCF服务,使用netTcpBinding的单个端点公开,它位于服务器A上,托管在我们域上的内部LAN上的IIS7.5/WAS上.
然后,此服务由位于服务器B上的ASP.NET Web客户端应用程序使用,该应用程序也在IIS7.5上托管,在我们的域外部具有外部托管提供商,并通过VPN连接到我们的LAN,仅允许服务器A之间的流量和服务器B.
在开发期间,当我测试这个概念时,我在我们域内的另一个IIS服务器上运行了Web客户端应用程序,使用绑定安全性mode="Transport"
和传输clientCredentialType="Windows"
工作正常.
然后我将Web客户端应用程序移动到外部服务器B,以进一步进行概念验证测试,设置绑定安全性mode="None"
,显然这个服务器在我们的域之外,我不能使用Windows身份验证,它仍然可以正常工作.
我现在需要做的是,启用切换回使用传输安全性是设置clientCredentialType="Certificate"
,因为你不能拥有传输安全性clientCredentialType="None"
.
这就是我开始失败的地方.我似乎围绕web.config
着服务和客户端web.config
在哪里定义证书以及在哪里存储证书的哪些部分.
基本上我要做的是验证服务器B确实是服务器B调用服务器A上的服务,从而防止任何欺骗或DNS颠覆问题,这可能导致服务器A上的服务被非法访问.
我的想法是我需要为服务器B创建一个证书,服务器A持有公钥来验证它?如果是这种情况,则服务器B已经安装了通配符SSL证书,因为它为我们的子域提供了各种应用程序.此证书可以用于WCF身份验证吗?
我发现的SO问题似乎都没有涵盖这一点,我发现的所有各种网站和书籍例子都不是那么清楚.它起初看起来像WCF配置有点像黑色艺术.
这都是使用.NET 4和Visual Basic构建的.任何帮助将不胜感激.
使用Visual Studio 2013 Update 5,我创建了一个样板MVC 5应用程序,其中选择了个人用户帐户身份验证选项,我一直在尝试使用模板代码实现社交登录,但一直未成功.
我确保所有NuGet包都是最新的,代码使用的是MVC 5.2.3; Owin 3.0.1; AspNet.Identity 2.0.0.
我可以使一切工作正常,包括使用OtpSharp的身份验证应用程序,但Facebook登录不管我尝试什么.
我创建了Facebook App,在其上设置了所有相关选项,并在我的Startup.Auth.cs文件中设置了AppId和AppSecret.
当我尝试使用Facebook登录时,MVC网站将我重定向到Facebook,这会提示我使用应用程序的auth屏幕.我单击确定并接受此然后我被重定向回MVC应用程序.如果我在我的Facebook帐户下检查授权的应用程序,我的应用程序会被列出并显示它已授予该应用程序检索电子邮件地址的权限.
回调工作正常,但当它击中时ExternalLoginCallback
,特别是:
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync()
Run Code Online (Sandbox Code Playgroud)
loginInfo
始终返回null.
查看请求它显示错误access_denied
:
https://localhost:44301/Account/ExternalLoginCallback?ReturnUrl=%2Fmanage&error=access_denied
Run Code Online (Sandbox Code Playgroud)
我已经阅读了很多关于这个错误的每篇博文和SO问题,虽然大多数都是有用的,但大多数也过时且不相关.
似乎模板化项目中缺少某些东西,或者其他地方已经发生了变化,因为无论我阅读哪个教程,我设置的选项,结果都是一样的.
我已经在运行IIS Express的开发机器上内部尝试了这个,并在运行IIS 7.5的托管机器上进行了外部尝试,结果是相同的.
我甚至反编译了Microsoft.Owin.Security.Facebook库,以查看查询字符串的特定部分设置为无帮助的位置.
如果我有任何头发,我现在已经全力以赴了.
我会接受任何建议.有人可以帮忙吗?
我有一个在 .NET 4.7.2 上运行并托管在 Azure AppService 中的 MVC 5 Web 应用程序,它使用 Azure Key Vault 来保存机密。该项目使用Microsoft.Azure.KeyVault 3.0.3
NuGet 包,并且使用KeyVaultClient
和访问机密.GetSecretAsync()
。所有资源都位于同一个 Azure 区域。
在大多数情况下,这非常有效,并且在大约 90% 的时间里,它以毫秒为单位返回秘密。
但访问 Key Vault 的调用时不时会失败。这不会表现为 SDK 抛出的异常,而是 Web 应用程序挂起。最终——通常在 1 分钟左右,但有时会更长——秘密被返回,一切又好起来了。这是因为 SDK 使用重试模式,它将不断尝试获取秘密。
查看 AppService 的 Application Insights,我可以看到 SDK 生成的 GET 请求从 Key Vault 获取 HTTP 500 响应并抛出 SocketException,结果代码为 ConnectFailure。
例外是:
查看遥测和单步执行代码,没有共同点或明显原因。这似乎是完全随机的。
底线是 Azure 托管的 AppService有时无法使用最新的框架和 SDK 版本连接到同一数据中心中的 Azure 托管的 Key Vault。
有没有其他人看到这个或有任何想法?我四处搜索,发现有几个人遇到了同样的问题,但没有人有原因或解决方案。
编辑(1):我现在尝试在完全不同的区域启动一个新的 Key Vault,问题仍然完全相同。
c# asp.net-mvc azure azure-application-insights azure-keyvault
我正在尝试将任何 https 流量捕获到我网站的前面,因此:
https://www.domain.com
Run Code Online (Sandbox Code Playgroud)
被重定向到:
http://www.domain.com
Run Code Online (Sandbox Code Playgroud)
但是,其他子域需要重定向到其他地方。在大多数情况下,除了 https -> http 重定向之外,这一切都有效。这是我目前的 .htaccess 文件:
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{HTTP_HOST} ^domain\.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
RewriteCond "%{HTTP_HOST}" !^www.* [NC]
RewriteCond "%{HTTP_HOST}" ^([^\.]+).*$
RewriteRule ^(.*)$ https://secure.domain.com/a/login/%1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
似乎这一点:
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
不像我想象的那样工作。事实上,它似乎根本没有重定向。
在另一个子目录中,我的效果正好相反:
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
所以我的想法是相反应该做的工作,但似乎没有。
有人有什么想法吗?
编辑
我认为这可能与以下事实有关:在服务器上有一个 ssl 证书,ISP 使用该证书为您的站点提供通用 https 地址。例如,如果您的网站位于:
您可以使用以下方法通过 https 访问相同的内容/托管帐户:
https://server100.securedomain.com/yourdomain.com
可能是因为当我在浏览器中输入 https 时,我正在获得通用证书,并且因为它与我输入的域名不匹配,所以我收到了一个关于不受信任的证书的安全警告,该证书正在停止重定向?
编辑 2
查看服务器标头,我认为我的上述假设是正确的。服务器返回:
The host name in the …
Run Code Online (Sandbox Code Playgroud) 我在ASP.NET中创建了一个带有简单RDLC报告的项目,当我DataSource
在设计时使用SqlDataSource
一切工具绑定报表时,一切正常.但是,如果我删除绑定并尝试设置DataSource
from代码,那么报告似乎永远不会停止加载.
我以前在WinForms应用程序上使用过这个并没有问题,但这是我第一次尝试在ASP.NET中做到这一点,没有运气.
下面是我使用的设置代码DataSource
的Page_Load
事件.正如我所说,使用相同的SqlDataSource
,如果它绑定在.aspx
页面中.
ReportViewer1.Reset()
ReportViewer1.ProcessingMode = ProcessingMode.Local
ReportViewer1.LocalReport.ReportPath = Server.MapPath("Report.rdlc")
ReportViewer1.LocalReport.DataSources.Clear()
ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1", SqlDataSource1))
ReportViewer1.LocalReport.Refresh()
Run Code Online (Sandbox Code Playgroud)
即使我直接在reportviewer控件中设置了报表,也只是将代码切换为...
ReportViewer1.LocalReport.DataSources.Clear()
ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1", SqlDataSource1))
ReportViewer1.LocalReport.Refresh()
Run Code Online (Sandbox Code Playgroud)
......它仍然是一样的.
此外,在加载报表时,在Visual Studio中,您可以看到不断生成大量脚本块(列表框不断增长):
在这种情况下,加载微调器正在中途转动,重新启动并重复.该页面没有重新加载.
有什么想法吗?
我有一个简单的.NET 4 WCF服务,我在IIS7.5上本地托管.最初我用它托管使用httpBinding
哪个工作正常.然后我把它切换到netTcpBinding
,web.config
相应地更改文件后也工作正常.但是今天它决定停止工作.我根本无法使用测试客户端连接到服务,获得:
URI: net.tcp://localhost/case/service.svc/mex Metadata contains a reference that cannot be resolved: 'net.tcp://localhost/case/service.svc/mex'. The message could not be dispatched because the service at the endpoint address 'net.tcp://localhost/case/service.svc/mex' is unavailable for the protocol of the address.
我已经检查过(仍然)安装了非http激活服务; net tcp listener服务正在运行; net.tcp位于站点的已启用协议列表中; 我跑了servicemodelreg.exe -ia
; 我也重新跑了aspnet_regiis.exe -i
; 最后我检查了网站上的net.tcp绑定.
如果我运行,netstat
我可以看到有东西正在侦听端口,但我无法连接到它.
这让我疯了,因为今天早上工作正常(就像上周一样),现在却没有.
编辑:如果我在IE中访问该服务,那么我可以看到它抛出以下异常:
Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding. Registered base …
Run Code Online (Sandbox Code Playgroud) 我有一个使用asp.net 4.0和EF开发的Web应用程序.但它的启动时间太慢了22秒.之后所有页面都在1秒内可用.我是在2010年通过vs清洁发布之后发布网站的.我应该做些什么来提高启动性能并减少这个时间?在我的webconfig中:
<compilation debug="false" batch="false" >
Run Code Online (Sandbox Code Playgroud)