亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

WCF 第一次嘗試:如何使 BasicHttpBinding 工作

WCF 第一次嘗試:如何使 BasicHttpBinding 工作

C#
慕神8447489 2022-06-19 16:52:31
由于目標機器主動拒絕,無法建立套接字連接我為 WCF 服務和客戶端實現了教科書(2008 年出版)中的樣板代碼。兩者都在 Windows 10 下的同一臺機器上運行,使用普通用戶帳戶(無管理員)。我研究了書中的信息以找到解決此問題的方法,但我不明白他們在說什么。服務using (var host = new ServiceHost(typeof(Service1), new Uri("http://localhost:8123/Service1"))){    host.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), "Service1Http");    host.Open();}這適用于管理員權限(不好,但第一次嘗試可以)??蛻魐ar ep = new EndpointAddress("http://localhost:8123/Service1/Service1Http");var proxy = ChannelFactory<IService1>.CreateChannel(new BasicHttpBinding(), ep);string s = proxy.SayHello();最后一行拋出異常,表示連接被“主動拒絕”。有人可以對此有所了解嗎?
查看完整描述

2 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

是的,正如您所說,客戶端需要在服務器自動關閉之前調用服務。您可以使用以下語句來防止服務器自動關閉。


class Program

    {

        static void Main(string[] args)

        {

            Uri uri = new Uri("http://localhost:13020");

            BasicHttpBinding binding = new BasicHttpBinding();

            binding.Security.Mode = BasicHttpSecurityMode.None;

            using (ServiceHost sh=new ServiceHost(typeof(MyService),uri))

            {

                sh.AddServiceEndpoint(typeof(IService), binding, "");

                ServiceMetadataBehavior smb;

                smb = sh.Description.Behaviors.Find<ServiceMetadataBehavior>();

                if (smb==null)

                {

                    smb = new ServiceMetadataBehavior()

                    {

                        HttpGetEnabled = true

                    };

                    sh.Description.Behaviors.Add(smb);

                }

                Binding mexbinding = MetadataExchangeBindings.CreateMexHttpBinding();

                sh.AddServiceEndpoint(typeof(IMetadataExchange), mexbinding, "mex");

                sh.Opened += delegate

                {

                    Console.WriteLine("service is ready...");

                };

                sh.Closed += delegate

                {

                    Console.WriteLine("Service is closed now...");

                };

                sh.Open();


                Console.ReadLine();

                sh.Close();

            }

        }  

}

一個問題仍然存在:如何讓服務器在沒有管理員權限的情況下運行?


您可以為您的應用程序帳戶提供所需的權限。為此,我們為帳戶保留 URL 命名空間,允許相關應用程序注冊該 URL。我們可以使用Netsh命令(這個工具需要管理員權限)。


Netsh http add urlacl url=http://+:8080/ user=domain\user

您應該用您的實際帳戶代替domain\user,并使用實際端口而不是8080,例如管理員。


Netsh http add urlacl url=http://+:8123/ user=administrator

“ + ”是通配符,表示所有網卡請求都可以訪問這個url。

這是有關此工具的官方文檔。

https://docs.microsoft.com/en-us/windows/desktop/Http/netsh-commands-for-http

如果有什么我可以幫忙的,請隨時告訴我。


查看完整回答
反對 回復 2022-06-19
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

這可能是由于服務器/客戶端之間的代理配置錯誤。我認為會有所幫助。



查看完整回答
反對 回復 2022-06-19
  • 2 回答
  • 0 關注
  • 167 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號