次のインターフェースを作成しました
[ServiceContract]
public interface IPlusFive
{
[OperationContract]
int PlusFive(int value);
}
および次のサーバー
class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(PlusFiver),
new Uri[] { new Uri("net.pipe://localhost") }))
{
host.AddServiceEndpoint(typeof(IPlusFive), new NetNamedPipeBinding(), "PipePlusFive");
host.Open();
Console.WriteLine("Service is Available. Press enter to exit.");
Console.ReadLine();
host.Close();
}
}
}
次に、C# クライアントを作成してテストしたところ、正常に動作しました。
このブログ投稿によると、パイプの名前を取得するには、メモリ マップ ファイルを読み取る必要があります。
だから私は名前を得るために次のように書いた
#include "stdafx.h"
#include "windows.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char pipeName[] = "EbmV0LnBpcGU6Ly8rL1BJUEVQTFVTRklWRS8=";
wcout << "Opening file map.."<< endl;
std::wstring mapFile;
mapFile.append(L"net.pipe:E");
mapFile.append(L"bmV0LnBpcGU6Ly8rLw==");
HANDLE fileMap = OpenFileMapping(FILE_MAP_READ, FALSE, mapFile.c_str());
if(fileMap == NULL)
{
wcout << "Failed to connect to pipe" << endl;
system("pause");
return 1;
}
wcout << "map opened."<< endl;
wcout << "reading file map" << endl;
LPCTSTR pBuf = (LPTSTR)MapViewOfFile(fileMap,
FILE_MAP_READ,
0,
0,
0);
if(pBuf == NULL)
{
wcout << "failed to read file map" << endl;
CloseHandle(fileMap);
system("pause");
return 1;
}
wcout << "File map read successfully" << endl;
wcout << "pipe name: " << pBuf << endl;
MessageBox(NULL, pBuf, TEXT("test"),MB_OK);
system("pause");
UnmapViewOfFile(pBuf);
CloseHandle(fileMap);
return 0;
}
次の出力が得られます
Opening file map..
map opened.
reading file map
File map read successfully
pipe name: ☺
Press any key to continue . . .
メモリ マップ ファイルはあるようですが、パイプの名前が含まれているようには見えません。私はC++を初めて使用するので、何か間違っているのか、それとも私がやろうとしていることが間違っているのかわかりません。ファイルを間違って読んでいますか?