我正在将Entity Framework 4用于一个简单的应用程序,并希望将我的连接凭据烘焙到以下连接字符串中:
<connectionStrings>
<add name="MyEntities"
connectionString="metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=localhost\DEV;Initial Catalog=MyDB;UserId=myUser;Password=jack&jill;MultipleActiveResultSets=True""
providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
但是,密码(我无法更改)包含&符号.ASP.NET抛出:
Configuration Error: An error occurred while parsing EntityName. Line XX, position YYY.
如果我用密码替换密码中的&符号&,我得到一个SqlException: Login failed for user 'myUser'. 通常这个技巧可行,但我猜测某些东西是失败的,因为这在技术上是连接字符串中的连接字符串.
我该怎么办?我的大多数课程包括以下代码:
using (var context = new MyEntities()) {
// do work
}
Run Code Online (Sandbox Code Playgroud)
更新: 事实证明我使用的凭据是域帐户,所以我真正需要的是Integrated Security=True连接字符串而不是密码.
按照接受的答案中的指示对&符号进行编码应该可以正常工作,尽管我还没有测试过.
我尝试在Mongolabs中部署我的Mongo数据库,一切正常,我创建了一个新的数据库.请看我的连接字符串.
public DbHelper()
{
MongoClientSettings settings = new MongoClientSettings()
{
Credentials = new MongoCredential[] { MongoCredential.CreateCredential("dbname", "username", "password") },
Server = new MongoServerAddress("ds011111.mongolab.com", 11111),
//ConnectTimeout = new TimeSpan(30000)
};
Server = new MongoClient(settings).GetServer();
DataBase = Server.GetDatabase(DatabaseName);
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试连接数据库时,它显示的错误如下:

我们正在使用Mongo DB的C#驱动程序(1.9.1).如果DB不可访问,我们有一些需要运行的回退逻辑,但是默认超时太长.我们试图改变它,但我们放置的值被忽略了.对于测试,我们使用的是无响应机器的IP.
我们尝试在连接字符串中设置超时:
<add key="Mongo" value="mongodb://xxx.xxx.xxx.xxx:27017/?socketTimeoutMS=2000&connectTimeoutMS=2000&waitqueuetimeoutms=2000"/>
Run Code Online (Sandbox Code Playgroud)
或者通过代码:
var client = new MongoClient(new MongoClientSettings
{
Server = new MongoServerAddress("xxx.xxx.xxx.xxx"),
SocketTimeout = new TimeSpan(0, 0, 0, 2),
WaitQueueTimeout = new TimeSpan(0, 0, 0, 2),
ConnectTimeout = new TimeSpan(0, 0, 0, 2)
});
Run Code Online (Sandbox Code Playgroud)
两次请求在平均约20秒后超时.
我们设置超时选项的方式可能有什么问题.
.Net 控制台应用程序在 4.6.1 框架中,使用 MongoDB.Driver 2.8.0。我在 SO 中引用了许多帖子,但我仍然收到超时错误。下面是我参考的一些帖子
使用 CompositeServerSelector System.TimeoutException 选择服务器 30000 毫秒后发生超时:使用 CompositeServerSelector MongoDB C# 2.0 TimeoutException选择服务器 30000 毫秒后发生超时
下面是我用来从集合中访问文档的代码。
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;
class Program
{
static void Main(string[] args)
{
string connectionString =
@"mongodb://mongoaccnt:ADASDXZWADAS2VgsqTYcTS4gtADmB1zQ==@mongocnt.documents.azure.com:10255/?ssl=true&replicaSet=globaldb";
MongoClientSettings settings = MongoClientSettings.FromUrl(
new MongoUrl(connectionString)
);
settings.SslSettings = new SslSettings() { EnabledSslProtocols = SslProtocols.Tls12 };
var mongoClient = new MongoClient(settings);
string dbName = "app-db";
string collectionName = "test";
var database = mongoClient.GetDatabase(dbName);
var todoTaskCollection = database.GetCollection<test>(collectionName);
var filter …Run Code Online (Sandbox Code Playgroud) 我有以下应用程序:
A - 应用程序 A 是托管在 IIS 7.5 中的 .net wcf 服务,使用在 .net 4.5 中编译的 c# mongodriver 2.2.4
B - 应用程序 B 是使用 mongodriver 1.11 在 .net 3.5 中编译的 Windows 服务应用程序
这两种服务是相似的,服务 B 是为遗留系统维护的,服务 A 正在演变。
这两个应用程序都托管在相同的服务器中。(Windows Standard 2008 R2) 这个应用程序已经完美运行了 1 年多,但自 2016 年 6 月 24 日起,应用程序 A (WCF) 在打开与 Mongo Server 的新连接时开始出现奇怪的行为:
Run Code Online (Sandbox Code Playgroud)> System.TimeoutException: A timeout occured after 30000ms selecting a > server using CompositeServerSelector{ Selectors = > ReadPreferenceServerSelector{ ReadPreference = { Mode = Primary, > …