Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF对象的实例存储在哪里?_C#_.net_Wcf - Fatal编程技术网

C# WCF对象的实例存储在哪里?

C# WCF对象的实例存储在哪里?,c#,.net,wcf,C#,.net,Wcf,我将要创建一个服务,它需要在世界的另一端调用托管的WCF服务。这没什么大不了的,因为交易数量相对较低。但是,我需要将可能在WCF中定义的类的实例传递给必要的WCF函数 所以我的问题是,这个类的实例是否存在于我的服务器上?还是每次尝试在对象中设置变量时都会联系主机服务器 例如:` public class Dog { public string noise; public int numLegs; } public class doSomething { publi

我将要创建一个服务,它需要在世界的另一端调用托管的WCF服务。这没什么大不了的,因为交易数量相对较低。但是,我需要将可能在WCF中定义的类的实例传递给必要的WCF函数

所以我的问题是,这个类的实例是否存在于我的服务器上?还是每次尝试在对象中设置变量时都会联系主机服务器

例如:`

   public class Dog
{
    public string noise;
    public int numLegs;
}

public class doSomething
{
    public string makeNoise(Dog x)
    {
        return x.noise;
    }
}
`
所有这些都在WCF中定义。因此,当我在本地创建一个类Dog的实例时,该实例是否会存在于我这边或承载WCF服务的服务器上?如果我设置1000个Dog实例,延迟肯定会增加。然而,如果我不必在每次更改Dog实例时都联系服务器,那么我唯一需要担心延迟的时间就是将其传递到doSomething.makeNoise中。

如果使用默认的每次调用实例化方法,主机会为每个请求创建一个新的服务类实例(这是推荐的方式)

因此,要么是托管WCF服务的IIS服务器创建了服务类的实例,要么是您在自己的自托管设置(控制台应用程序、Windows服务等)中创建的
ServiceHost
实例

服务类实例用于处理您的请求—对服务类执行适当的方法,发回任何结果—然后再次释放它

还有每个会话的模式,在这种情况下(假设您选择了支持会话的绑定),您的第一个调用将创建一个服务类实例,然后您的后续调用将转到同一个已经创建的实例(直到超时开始等)


还有单例模式,在这种模式下,您只有一个服务类实例来处理所有请求-然而,这在编程方面相当棘手,并且在可伸缩性和性能方面“面临挑战”

您将需要在公共可用服务器上托管WCF服务(例如IIS)。成功托管将为您提供svc文件的链接。单击该链接将为您提供一个以
singleWsdl
结尾的链接。您需要复制该链接。在需要引用WCF的客户端,您需要添加服务引用并传递该链接。这将使用
client
生成代理代码对象,您可以使用这些对象访问WCF
ServiceOperation
方法。

您至少应该有三个项目。一个网站项目承载实际站点。一个WCF项目承载您的服务。最后是一个共享项目,其中应包含您关心的类(模型)

网站和wcf项目都应该引用共享项目,这样他们都知道模型的外观

wcf项目应该将序列化模型作为json对象返回,这通常是通过引用Newtonsoft.json来实现的

您的网站项目应该使用此json,并使用Newtonsoft.json对其进行反序列化。这就是为什么您的类(模型)应该存在于共享项目中,以便您可以在服务调用的两侧使用相同的类。

请解释更多内容“将可能在WCF中定义的类的实例传递给必要的WCF函数”表示可能。显示一个代码示例,说明您正在尝试执行的操作。