WCF进程被终止 - 由于stackoverflowexception

时间:2015-10-14 19:02:50

标签: c# asp.net web-services wcf

当我在我的WCF服务中运行一个方法时,我得到了#34;一个未处理的类型' System.StackOverflowException'发生在developer1SVC.dll"。

不存在无限循环且不会发生无限递归。为什么会发生这种情况的任何想法?当我通过wcf测试客户端运行该方法时。我正确地得到了结果,然后将它连接到我的控制台应用程序并运行它会破坏应用程序。其他方法运行正常。这是一种方法。只是想了解WCF服务。我从" generateMultiplAccounts"返回帐户后,服务中断了。方法

非常感谢。

服务

using developer1.Core.ServiceContracts;
using developer1.Core.Data;
using developer1.Core.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using developer1.Core.Dto.Account;

namespace developer1.Core.Service
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    // NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.
    public class Service1 : IService1
    {
        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

        public CompositeType GetDataUsingDataContract(CompositeType composite)
        {
            if (composite == null)
            {
                throw new ArgumentNullException("composite");
            }
            if (composite.BoolValue)
            {
                composite.StringValue += "Suffix";
            }
            Console.WriteLine(composite.StringValue + composite.BoolValue);
            return composite;
        }

        public List<AccountDto> GenerateMultipleAccounts(int count)
        {
            List<AccountDto> accounts = new List<AccountDto>();
            for (int i = 0; i < count; i++)
            {
                AccountDto newAccount = new AccountDto() { AccountId = Guid.NewGuid()};
                accounts.Add(newAccount);

            }
            return accounts;

        }
    }
}

控制台应用

using developer1.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using developer1.Core.Service;
using developer1.Core.Dto.Account;
using developer1.Core.ServiceContracts;
using AccountServiceClient = developer1.TestConsole.ServiceReference1.Service1Client;

namespace developer1.TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                AccountServiceClient AccountServiceClient = new AccountServiceClient();
                Guid testGuid = Guid.NewGuid();


List<AccountDto> newAccounts = new List<AccountDto>(AccountServiceClient.GenerateMultipleAccounts(2));
                Console.WriteLine(testGuid);
                CompositeType testDataContract = new CompositeType() { StringValue = "test", BoolValue = true };
                testDataContract = AccountServiceClient.GetDataUsingDataContract(testDataContract);
                Console.WriteLine(AccountServiceClient.GetData(6));
                Console.WriteLine(testDataContract.StringValue);
                //foreach (var item in newAccounts)
                //{

                //    Console.WriteLine(item.AccountId);
                //}

            }
            catch(Exception e) {
                Console.WriteLine(e);
            }
            Console.Read();
        }
    }
}

数据合同

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Web;

namespace developer1.Core.Dto.Account
{
    [DataContract]
    public class AccountDto
    {
        [DataMember]
        public Guid AccountId { get; set; }
        //get { return this.AccountId; }
    //set { this.AccountId = this.AccountId == Guid.Empty ? Guid.NewGuid() : value; }

        [DataMember]
        public Guid UserId { get; set; }

        [DataMember]
        public string AccountName { get; set; }

        [DataMember]
        public string BankName { get; set; }

        //get { return this.BankName; }
        //set { this.BankName = this.BankName == null ? "Unspecified" : value; }

}
}

ANSWER !!!!!!!

所以我解决了这个可怕的问题。您必须创建WCF服务库而不是WCF服务应用程序。我的上帝愚蠢的是,应用程序不会让你将组件拆分到界面之外。

0 个答案:

没有答案