有很多博客,SO问题告诉你如何知道对象是否已被处置.例如,使用IsDisposed某些类可用的属性.
我想知道:
IsDisposed正在返回true,如果对象已被处理,我们怎么可以IsDisposed在其上调用属性?更新#1:
我在几个答案之后跟进了一些问题,说" Disposed并不意味着对象已经死了;它只是意味着它所持有的任何未经纳入的资源都被释放了.":
Disposed不是说this对象被处置?Disposed对象本身没有死,为什么我们得到ObjectDisposedException?(这不是说这个物体不能再使用了吗?)在我的ASP.NET Core 3.1应用程序中,我需要在应用程序启动时立即设置查询字符串参数。但是当我applicationUrl在文件中设置查询字符串参数时launchsettings.json,应用程序无法启动。
您可以看到,应用程序 URL 框变成了黄色,并且 Visual Studio 不允许我保存!
如果我在文本编辑器中打开launchsettings.json,设置此 URL 并保存文件,则在从 Visual Studio 运行应用程序时会收到以下错误。我收到以下错误:
有人可以解释一下,1.为什么不可能?2.解决办法是什么?3. ASP.NET Core 在会话启动期间传递某些值的方式是什么?
注意:我需要在启动应用程序时传递 TPAId,因为我的应用程序是许多其他企业应用程序之一,这在某种程度上迫使我这样做。
visual-studio asp.net-core-mvc .net-core asp.net-core visual-studio-2019
我知道这个方法现在正在回归List<string>.但在某些情况下(在我们的应用程序中频繁出现)场景中,它返回的List 只有一个字符串.
所以最终它会返回string或者List<string>.
由于它在运行时会返回它是不可预测的,因此目前它的返回类型保持为object.
可以使用哪种替代方法来避免方法返回object?
编辑:我想回答问题可以使用哪种替代方法来避免方法返回object?; 不考虑我描述的情景.列表就够了.
我有很多WCF服务,我需要从另一个服务中调用一个服务.我决定netNamedPipeBinding为此目的使用.
我的web.config文件看起来像这样.(我没有在这里复制不相关的东西.)
<services>
<service name="Services.AuthorizationService" >
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" >
<endpoint
name="AuthorizationService"
address=""
binding="basicHttpBinding" contract="ServiceContracts.IAuthorizationService" />
<endpoint address="net.pipe://localhost/TestSite/AuthorizationService.svc"
binding="netNamedPipeBinding" contract="ServiceContracts.IAuthorizationService"
name="AuthorizationNamedPipeEndpoint"/>
</service>
</Services>
Run Code Online (Sandbox Code Playgroud)
web.config文件中的客户端部分如下所示:
<client>
<endpoint address="net.pipe://localhost/TestSite/AuthorizationService.svc"
binding="netNamedPipeBinding" contract="ServiceContracts.IAuthorizationService" name="AuthorizationServiceNamedPipe" />
</client>
Run Code Online (Sandbox Code Playgroud)
我试图OperationContract像这样调用其中一个(GetDetails):
using (ChannelFactory<IAuthorizationService> authorizationChannel = new ChannelFactory<IAuthorizationService>("AuthorizationServiceNamedPipe"))
{
IAuthorizationService authorizationService = authorizationChannel.CreateChannel();
var response = authorizationService.GetDetails(new GetDetailsRequestMessage());
}
Run Code Online (Sandbox Code Playgroud)
当我执行此代码时,我在调用OperationContract GetDetails的行中得到异常:
在net.pipe://localhost/TestSite/AuthorizationService.svc上没有可以接受该消息的端点.这通常是由错误的地址或SOAP操作引起的.有关更多详细信息,请参阅InnerException(如果存在).
我无法找出确切的问题.也没有InnerException.我使用的是Windows7机器,IIS版本是IIS7.5.请注意,我可以从我的Winform应用程序中调用此服务,没有任何问题.net.pipe绑定添加到IIS中的网站绑定.
如何使用net.pipe传输确保服务正常工作?在HTTP的情况下,我们可以在IE中浏览并确保它.
我正在使用智能卡来验证用户身份.我有一个身份验证服务(SecurityTokenService),它处理服务器上的身份验证逻辑.
我正在使用X509Certificate2.Verify()来验证证书.由于此API可以通过联机并联系证书颁发机构(CA)来检查证书是否有效/已撤销,我是否需要服务器上的根证书?
我们可以避免在本地计算机上拥有根证书吗?或根证书总是强制性的?
我想使用XML将XML从客户端传输到某个服务器FTP.我得到的是XmlElement对象.我知道我可以创建File并将其上传到适当的位置(FTP).
但是,我认为最好File在内存中创建(以避免在本地磁盘上保存文件).
有人可以指导我如何实现这一目标?
我正在使用C#4.0.
有没有办法object在运行时对一些特定类型进行类型转换?有可能吗?
public static void TryTypeCasting(object obj)
{
Type type = obj.GetType();
// Can I use this "type" variable somehow to typecast "obj" to its actual type?
}
Run Code Online (Sandbox Code Playgroud)
我正在使用C#4.0.
编辑1:
谢谢大家的投入.
我可能想要实现一些不可能的事情.但我发布了这个问题是为了获得专家的意见,并知道这样的事情是否可以在C#4.0中实现.
这是一个实时问题:
在我们的产品中,我们的客户端API(方法)序列化了Employee从我们的实体类派生的"some"类(例如)的实例Person.该序列化实例(即字符串值)通过一些中间类发送到服务器端API(一种负责将字符串反序列化为适当类的实例的方法).因此,在服务器端,只有API获取的是字符串.
但是,在序列化时,自定义序列化程序始终将类的完全限定名称(其实例正在序列化)添加为结果输出的第一行.所以在服务器端,在读取第一行时,我知道Employee字符串应该被反序列化的类(即在这种情况下).
此外,我们调用接受类型参数的Web服务方法(我不允许更改)Person.
现在,在此阶段反序列化后,我有一个Employee存储在类型变量中的实例object.但即使实例可用,我也无法将其作为参数传递,直到我将其强制转换为Employee.我怎样才能做到这一点?
示例代码在此处提供:
public static void Deserialize(string serializedObject)
{
StringReader stringReader = new StringReader(serializedObject);
// Read the first line to know class and assembly details
string firstLine = …Run Code Online (Sandbox Code Playgroud) 从我的C# 4.0代码中,我想在Sybase和上执行一些查询MSSQL.正在运行时将决定/知道正在使用(或将要使用)的数据库.
我使用AseCommand,并SqlCommand分别为Sybase和SQL.
我决定创建这样的泛型方法:
private Department ExecuteCommand<T>(T databaseCommand) where T : class
{
Department department = new Department ();
dynamic command = databaseCommand;
using (dynamic databaseReader = command.ExecuteReader())
{
if (databaseReader.HasRows)
{
while (databaseReader.Read())
{
department.Employees.Add(this.CreateDepartmentInstance(databaseReader));
}
}
}
command.Connection.Dispose();
return department;
}
Run Code Online (Sandbox Code Playgroud)
问题:
dynamic吗?dynamic呢?我有以下代码:
public class Employee
{
public string Name { get; set; }
}
public class InstanceManager
{
public static Employee employee;
public static Employee GetEmployee()
{
if(employee == null)
{
employee = new Employee {Name = "Tom"};
}
return employee;
}
}
public class TestClass
{
public void Test()
{
Employee emp = InstanceManager.GetEmployee();
var name = emp.Name;
emp = null;
var name2 = InstanceManager.GetEmployee().Name;
}
}
Run Code Online (Sandbox Code Playgroud)
在该Test()方法中,局部变量emp引用InstanceManager.Employee对象.然后,我设置emp为null.
InstanceManager.Employee …在DateTime.ParseExact使用Swedish(sv-SE)文化的方法的情况下,我观察到一些奇怪的行为.
我的计算机文化是,en-US但业务逻辑需要sv-SE文化.所以我先将它设置在当前线程上.
Thread.CurrentThread.CurrentUICulture = new CultureInfo("sv-SE");
Run Code Online (Sandbox Code Playgroud)
然后我执行以下操作来解析DateTime值.我想在这里解析的日期时间是2012年5月27日上午11:57.
DateTime.ParseExact("270512T11:57", "ddMMyyThh:mm", Thread.CurrentThread.CurrentUICulture);
Run Code Online (Sandbox Code Playgroud)
这很好用.
但是当我从晚上开始时,我得到了例外.当我尝试解析2012年5月27日晚上11:57的日期时间戳.
DateTime.ParseExact("270512T23:57", "ddMMyyThh:mm", Thread.CurrentThread.CurrentUICulture);
Run Code Online (Sandbox Code Playgroud)
上面的行给出了FormatException消息字符串未被识别为有效的DateTime..
这里真的有什么不对?
我有两个接口IConfigurationManager并ILocator在同一个程序集中定义(让我们称之为程序集"A")和相同的命名空间.
有一个名为"B"的启动项目,它对程序集"A"有"项目引用".
程序集A也包含两个接口的具体实现.我在程序集A上有一个"post-build事件",它将DLL复制到"B"项目的'bin\debug'文件夹,当我从visual studio 2012运行它时运行应用程序.
在app.config文件中,我提到了当我想要两个接口的具体实现时要使用的程序集和类型.(我需要在运行时解析类型映射,并且将在不同的程序集中具有接口和实现,而我根本没有开发它们.)
在我的代码中,我Assembly.LoadFile()从启动项目的'bin\debug \'文件夹中加载程序集A(使用).然后我遍历所有类型并ILocator使用以下代码检查类是否是类型:
if(type.GetInterfaces.Contains(typeof(IConfigurationManager))
Run Code Online (Sandbox Code Playgroud)
这返回FALSE,但另一方面,ILocator返回TRUE的类似代码.为什么会这样?我也尝试过使用IsAsseignableFrom(),但结果相同.
为什么一个调用成功而另一个调用失败时,所有内容(如声明接口的程序集,加载了哪个类型的程序集等)在检查类实现的接口时是否相同?
注意:我知道Unity容器等.但我仍然有与使用反射进行类型检查相关的相同问题.
.net ×8
c# ×8
generics ×2
reflection ×2
.net-core ×1
asp.net-core ×1
c#-4.0 ×1
certificate ×1
clr ×1
datetime ×1
file-upload ×1
idisposable ×1
localization ×1
smartcard ×1
typeof ×1
wcf ×1
wcf-binding ×1