Restructure source tree to align with .NET Core apps (#4)

Align Docker config structure and containers with IoTEdge
Integrate initial PR feedback
This commit is contained in:
Hans Gschossmann 2018-07-09 21:28:53 +02:00 коммит произвёл GitHub
Родитель 231476f383
Коммит 85dfe69e7f
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
31 изменённых файлов: 919 добавлений и 199 удалений

Просмотреть файл

@ -1,13 +0,0 @@
FROM microsoft/dotnet:2.1-sdk-nanoserver-1803 as build-env
COPY /src /build/src
WORKDIR /build/src
RUN dotnet restore
RUN dotnet publish --configuration Release --output /build/out
FROM microsoft/dotnet:2.1-runtime-nanoserver-1803
COPY --from=build-env /build/out /build/out
WORKDIR /docker
ENTRYPOINT ["dotnet", "/build/out/OpcPublisher.dll"]

Просмотреть файл

@ -1,13 +0,0 @@
FROM microsoft/dotnet:2.1-sdk-stretch AS build-env
COPY /src /build/src
WORKDIR /build/src
RUN dotnet restore
RUN dotnet publish --configuration Release --output /build/out
FROM microsoft/dotnet:2.1.0-runtime-stretch-slim
COPY --from=build-env /build/out /build/out
WORKDIR /docker
ENTRYPOINT ["dotnet", "/build/out/OpcPublisher.dll"]

Просмотреть файл

@ -1,22 +0,0 @@
FROM microsoft/dotnet:2.0-runtime-stretch AS base
RUN apt-get update && \
apt-get install -y --no-install-recommends unzip procps && \
rm -rf /var/lib/apt/lists/*
RUN useradd -ms /bin/bash moduleuser
USER moduleuser
RUN curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
FROM microsoft/dotnet:2.0-sdk AS build-env
COPY /src /build/src
WORKDIR /build/src
RUN dotnet restore
RUN dotnet publish --configuration Debug --output /build/out
FROM microsoft/dotnet:2.0-runtime
FROM base
WORKDIR /docker
COPY --from=build-env /build/out ./
ENTRYPOINT ["dotnet", "OpcPublisher.dll"]

Просмотреть файл

@ -1,15 +0,0 @@
FROM microsoft/dotnet:2.1-sdk AS build-env
COPY /src /build/src
WORKDIR /build/src
RUN dotnet restore
RUN dotnet publish --configuration Release --output /build/out
FROM microsoft/dotnet:2.1-runtime-stretch-slim-arm32v7
WORKDIR /docker
COPY --from=build-env /build/out ./
RUN useradd -ms /bin/bash moduleuser
USER moduleuser
ENTRYPOINT ["dotnet", "OpcPublisher.dll"]

Просмотреть файл

@ -1,11 +0,0 @@
FROM microsoft/dotnet:2.0-sdk AS build-env
COPY /src /build/src
WORKDIR /build/src
RUN dotnet restore
RUN dotnet publish --configuration Release --output /build/out
FROM microsoft/dotnet:2.0-runtime
WORKDIR /docker
COPY --from=build-env /build/out ./
ENTRYPOINT ["dotnet", "OpcPublisher.dll"]

Просмотреть файл

@ -645,7 +645,7 @@ Configuration file syntax has changed over time and OPC Publisher still can read
An example for the format of the configuration file is: An example for the format of the configuration file is:
[ [
{ {
"EndpointUrl": "opc.tcp://192.168.178.26:62541/Quickstarts/ReferenceServer", "EndpointUrl": "opc.tcp://testserver:62541/Quickstarts/ReferenceServer",
"UseSecurity": false, "UseSecurity": false,
"OpcNodes": [ "OpcNodes": [
{ {
@ -658,7 +658,7 @@ An example for the format of the configuration file is:
] ]
### Configuration via OPC UA method calls ### Configuration via OPC UA method calls
OPC Publisher has an OPC UA Server integrated, which could be accessed on port 62222. If the hostname is `publisher`, then the URI of the endpoint is: `opc.tcp://pub-test:62222/UA/Publisher` OPC Publisher has an OPC UA Server integrated, which can be accessed on port 62222. If the hostname is `publisher`, then the URI of the endpoint is: `opc.tcp://publisher:62222/UA/Publisher`
This endpoint exposes three methods: This endpoint exposes three methods:
- PublishNode - PublishNode
- UnpublishNode - UnpublishNode

654
THIRDPARTYNOTICES Normal file
Просмотреть файл

@ -0,0 +1,654 @@
OPC Publisher Components
Third Party Notices
This file is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Unless otherwise specified, Microsoft licenses the Third Party IP to you under the licensing terms for the Microsoft product. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
***
Serilog.Sinks.File
Apache License Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
***
Serilog.Sinks.Console
Apache License Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
***
Serilog.Extensions.Logging
Apache License Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
***
Newtonsoft.Json
The MIT License (MIT)
Copyright (c) .NET Foundation and Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
***
NETStandard.Library
The MIT License (MIT)
Copyright (c) .NET Foundation and Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
***
Xamarin Component for Mono.Options
The MIT License (MIT)
Copyright (c) .NET Foundation Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20170421
***
OPCFoundation.NetStandard.Opc.Ua
OPC REDISTRIBUTABLES Agreement of Use
Version 1.3, February 06, 2017, OPC Foundation
The terms and conditions of the Agreement apply to the Software Deliverables including without limitation any OPC Foundation:
updates,
supplements
Internet-based services, and
support services
for the Software Deliverables, unless OPC Foundation specifies that any other terms accompany such items, in which case the alternate terms specified by OPC Foundation would apply.
BY USING THE SOURCE DELIVERABLES, YOU ACCEPT THE TERMS OF THIS AGREEMENT. IF YOU DO NOT ACCEPT THE TERMS OF THIS AGREEMENT, DO NOT USE THE SOFTWARE DELIVERABLES.
If you comply with this Agreement, you have the rights below.
1. INSTALLATION AND USE RIGHTS.
You may install and use any number of copies of the Software Deliverables.
2. ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.
Distributable Code. The Software Deliverables contain compiled code that you are permitted to distribute with programs you develop if you comply with the terms below.
Right to Use and Distribute.
You may copy and distribute all files that are part of this Software Deliverables.
Third Party Distribution. You may permit distributors of your programs to copy and distribute the Software Deliverables as part of those programs.
Distribution Requirements. For any Software Deliverables you distribute, you must:
add significant primary functionality to it in your programs;
require distributors and external end users to agree to terms that protect it at least as much as this Agreement;
display your valid copyright notice on your programs; and
indemnify, defend, and hold harmless the OPC Foundation from any claims, including attorneys fees, related to the distribution or use of your programs.
Distribution Restrictions. You may not:
alter any copyright, trademark or patent notice in the Software Deliverables;
use the OPC Foundations trademarks in your programs names or in a way that suggests your programs come from or are endorsed by the OPC Foundation;
include Software Deliverables in malicious, deceptive or unlawful programs;
modify or distribute the source code of any Software Deliverables so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that (1). the code be disclosed or distributed in source code form; or (2) permit or otherwise allow others to have the right to modify such Software Deliverables; or
create additional software components that directly link or directly load the Software Deliverables without accepting the corresponding source license for that Software Deliverable.
3. SCOPE OF LICENSE.
The Software Deliverables are licensed, not sold. This Agreement only gives you some rights to use the Software Deliverables. The OPC Foundation reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this Agreement. In doing so, you must comply with any technical limitations in the Software Deliverables that only allow you to use it in certain ways. You may not:
disclose the results of any benchmark tests of the Software Deliverables to any third party without OPC Foundations prior written approval;
work around any technical limitations in the Software Deliverables;
reverse engineer, decompile or disassemble the Software Deliverables, except and only to the extent that applicable law expressly permits, despite this limitation;
make more copies of the Software Deliverables than specified in this Agreement or allowed by applicable law, despite this limitation;
publish the Software Deliverables for others to copy; or
rent, lease or lend the Software Deliverables.
4. BACKUP COPY.
You may make one backup copy of the Software Deliverables. You may use such copy only to reinstall the Software.
5. DOCUMENTATION.
Any person that has valid access to your computer or internal network may copy and use the documentation related to the Software Deliverables for your internal reference purposes.
6. EXPORT RESTRICTIONS.
The Software Deliverables are subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the Software Deliverables. These laws include restrictions on destinations, end users and end use.
7. SUPPORT SERVICES.
Because you accept the Software3 Deliverables from OPC Foundation “as is,” OPC Foundation may not provide support services for it.
8. ENTIRE AGREEMENT.
This Agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire Agreement for the Software Deliverables and support services.
10. LEGAL EFFECT
This Agreement describes certain legal rights. You may have other rights under the laws of your country. This Agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.
11. DISCLAIMER OF WARRANTY.
THE SOFTWARE DELIVERABLES ARE LICENSED “AS-IS.” YOU BEAR THE RISK OF USING THE SPECIFICATIONS. THE OPC FOUNDATION MAKES NO WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, WITH REGARD TO THE SOFTWARE DELIVERABLES, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF TITLE OR OWNERSHIP, IMPLIED WARRANTY OF MERCHANTABILITY, OR WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE.YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS THAT THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, THE OPC FOUNDATION EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
IN NO EVENT SHALL THE OPC FOUNDATION BE LIABLE FOR ERRORS CONTAINED IN THE SOURCE DELIVERABLES OR FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, RELIANCE OR COVER DAMAGES, INCLUDING LOSS OF PROFITS, REVENUE, DATA, OR USE, INCURRED BY ANY USER OR ANY THIRD PARTY IN CONNECTION WITH THE FURNISHING, PERFORMANCE, OR USE OF THE SOFTWARE DELIVERABLES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE USING THE SOFTWARE DELIVERABLES IS BORNE BY YOU AND/OR THE USER.
***

Просмотреть файл

@ -0,0 +1,26 @@
ARG runtime_base_tag=2.1-runtime-alpine
ARG build_base_tag=2.1-sdk-alpine
FROM microsoft/dotnet:${build_base_tag} AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY opcpublisher/*.csproj ./opcpublisher/
WORKDIR /app/opcpublisher
RUN dotnet restore
# copy and publish app
WORKDIR /app
COPY opcpublisher/. ./opcpublisher/
WORKDIR /app/opcpublisher
RUN dotnet publish -c Release -o out
RUN ls /app/opcpublisher/out
# start it up
FROM microsoft/dotnet:${runtime_base_tag} AS runtime
# Add an unprivileged user account for running the module
RUN adduser -Ds /bin/sh moduleuser
USER moduleuser
WORKDIR /app
COPY --from=build /app/opcpublisher/out ./
ENTRYPOINT ["dotnet", "opcpublisher.dll"]

Просмотреть файл

@ -0,0 +1,34 @@
ARG runtime_base_tag=2.1-runtime-stretch-slim
ARG build_base_tag=2.1-sdk-stretch
FROM microsoft/dotnet:${build_base_tag} AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY opcpublisher/*.csproj ./opcpublisher/
WORKDIR /app/opcpublisher
RUN dotnet restore
# copy and publish app
WORKDIR /app
COPY opcpublisher/. ./opcpublisher/
WORKDIR /app/opcpublisher
RUN dotnet publish -c Release -o out
RUN ls /app/opcpublisher/out
# start it up
FROM microsoft/dotnet:${runtime_base_tag} AS runtime
RUN apt-get update && \
apt-get install -y --no-install-recommends unzip procps && \
rm -rf /var/lib/apt/lists/*
# Add an unprivileged user account for running the module
RUN useradd -ms /bin/bash moduleuser
USER moduleuser
RUN curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
WORKDIR /app
COPY --from=build /app/opcpublisher/out ./
ENTRYPOINT ["dotnet", "opcpublisher.dll"]

Просмотреть файл

@ -1,7 +1,7 @@
FROM microsoft/dotnet:2.1-sdk-stretch FROM microsoft/dotnet:2.1-sdk-stretch
RUN apt-get update && apt-get install -y unzip \ RUN apt-get update && apt-get install -y unzip \
&& curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v vs2017u1 -l ~/vsdbg && curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
ENV PATH="${PATH}:/root/vsdbg/vsdbg" ENV PATH="${PATH}:/root/vsdbg/vsdbg"
RUN apt-get update && apt-get install -y openssh-server \ RUN apt-get update && apt-get install -y openssh-server \
@ -12,5 +12,5 @@ RUN apt-get update && apt-get install -y openssh-server \
&& echo "export VISIBLE=now" >> /etc/profile && echo "export VISIBLE=now" >> /etc/profile
ENV NOTVISIBLE "in users profile" ENV NOTVISIBLE "in users profile"
WORKDIR /docker WORKDIR /app
ENTRYPOINT ["bash"] ENTRYPOINT ["bash"]

Просмотреть файл

@ -0,0 +1,26 @@
ARG runtime_base_tag=2.1-runtime-bionic-arm32v7
ARG build_base_tag=2.1-sdk-bionic-arm32v7
FROM microsoft/dotnet:${build_base_tag} AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY opcpublisher/*.csproj ./opcpublisher/
WORKDIR /app/opcpublisher
RUN dotnet restore
# copy and publish app
WORKDIR /app
COPY opcpublisher/. ./opcpublisher/
WORKDIR /app/opcpublisher
RUN dotnet publish -c Release -o out
RUN ls /app/opcpublisher/out
# start it up
FROM microsoft/dotnet:${runtime_base_tag} AS runtime
# Add an unprivileged user account for running the module
RUN adduser -Ds /bin/sh moduleuser
USER moduleuser
WORKDIR /app
COPY --from=build /app/opcpublisher/out ./
ENTRYPOINT ["dotnet", "opcpublisher.dll"]

Просмотреть файл

@ -0,0 +1,23 @@
ARG runtime_base_tag=2.1-runtime-nanoserver-1803
ARG build_base_tag=2.1-sdk-nanoserver-1803
FROM microsoft/dotnet:${build_base_tag} AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY opcpublisher/*.csproj ./opcpublisher/
WORKDIR /app/opcpublisher
RUN dotnet restore
# copy and publish app
WORKDIR /app
COPY opcpublisher/. ./opcpublisher/
WORKDIR /app/opcpublisher
RUN dotnet publish -c Release -o out
RUN ls /app/opcpublisher/out
# start it up
FROM microsoft/dotnet:${runtime_base_tag} AS runtime
WORKDIR /app
COPY --from=build /app/opcpublisher/out ./
ENTRYPOINT ["dotnet", "opcpublisher.dll"]

67
opcpublisher.sln Normal file
Просмотреть файл

@ -0,0 +1,67 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2036
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{560B34E9-68E3-4033-94D4-CE24073F5904}"
ProjectSection(SolutionItems) = preProject
.gitattributes = .gitattributes
.gitignore = .gitignore
.travis.yml = .travis.yml
appveyor.yml = appveyor.yml
License.txt = License.txt
README.md = README.md
THIRDPARTYNOTICES = THIRDPARTYNOTICES
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "opcpublisher", "opcpublisher\opcpublisher.csproj", "{215DC07F-AFA5-445C-BE70-09BF009C9A66}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{8B205340-83A1-4748-9417-0300C1AA5CA3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "linux", "linux", "{E702EA85-1054-4252-B029-78B694D08C08}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "windows", "windows", "{BC12870A-38D7-4A8F-9C6B-925101D402FB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "amd64", "amd64", "{7AE30F71-DFA6-4E09-8CAD-334D009515C1}"
ProjectSection(SolutionItems) = preProject
docker\linux\amd64\Dockerfile = docker\linux\amd64\Dockerfile
docker\linux\amd64\Dockerfile.debug = docker\linux\amd64\Dockerfile.debug
docker\linux\amd64\Dockerfile.ssh = docker\linux\amd64\Dockerfile.ssh
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "arm32v7", "arm32v7", "{94E5355D-AA16-4E28-8B34-FA1CDBC77312}"
ProjectSection(SolutionItems) = preProject
docker\linux\arm32v7\Dockerfile = docker\linux\arm32v7\Dockerfile
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "amd64", "amd64", "{8F91D4C5-8CD0-4195-9B3E-1072F0B87E92}"
ProjectSection(SolutionItems) = preProject
docker\windows\amd64\Dockerfile = docker\windows\amd64\Dockerfile
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{215DC07F-AFA5-445C-BE70-09BF009C9A66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{215DC07F-AFA5-445C-BE70-09BF009C9A66}.Debug|Any CPU.Build.0 = Debug|Any CPU
{215DC07F-AFA5-445C-BE70-09BF009C9A66}.Release|Any CPU.ActiveCfg = Release|Any CPU
{215DC07F-AFA5-445C-BE70-09BF009C9A66}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{8B205340-83A1-4748-9417-0300C1AA5CA3} = {560B34E9-68E3-4033-94D4-CE24073F5904}
{E702EA85-1054-4252-B029-78B694D08C08} = {8B205340-83A1-4748-9417-0300C1AA5CA3}
{BC12870A-38D7-4A8F-9C6B-925101D402FB} = {8B205340-83A1-4748-9417-0300C1AA5CA3}
{7AE30F71-DFA6-4E09-8CAD-334D009515C1} = {E702EA85-1054-4252-B029-78B694D08C08}
{94E5355D-AA16-4E28-8B34-FA1CDBC77312} = {E702EA85-1054-4252-B029-78B694D08C08}
{8F91D4C5-8CD0-4195-9B3E-1072F0B87E92} = {BC12870A-38D7-4A8F-9C6B-925101D402FB}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C1B8DD9F-B491-4E8A-8DF9-3077636E9A84}
EndGlobalSection
EndGlobal

Просмотреть файл

@ -16,8 +16,6 @@ namespace OpcPublisher
{ {
public static uint DiagnosticsInterval { get; set; } = 0; public static uint DiagnosticsInterval { get; set; } = 0;
public static int IotHubMessagingMessagesSentCount { get; } = 0;
public static void Init() public static void Init()
{ {
// init data // init data

Просмотреть файл

@ -28,8 +28,8 @@ namespace OpcPublisher
{ {
private class IotCentralMessage private class IotCentralMessage
{ {
public string Key; public string Key { get; set; }
public string Value; public string Value { get; set; }
public IotCentralMessage() public IotCentralMessage()
{ {
@ -554,7 +554,7 @@ namespace OpcPublisher
} }
// set count // set count
uint requestedEndpointsCount = getConfiguredEndpointsMethodRequest.Count ?? endpointsCount - startIndex; uint requestedEndpointsCount = endpointsCount - startIndex;
uint availableEndpointCount = endpointsCount - startIndex; uint availableEndpointCount = endpointsCount - startIndex;
uint actualEndpointsCount = Math.Min(requestedEndpointsCount, availableEndpointCount); uint actualEndpointsCount = Math.Min(requestedEndpointsCount, availableEndpointCount);
@ -643,7 +643,7 @@ namespace OpcPublisher
} }
// set count // set count
uint requestedNodeCount = getConfiguredNodesOnEndpointMethodRequest.Count ?? configuredNodesOnEndpointCount - startIndex; uint requestedNodeCount = configuredNodesOnEndpointCount - startIndex;
uint availableNodeCount = configuredNodesOnEndpointCount - startIndex; uint availableNodeCount = configuredNodesOnEndpointCount - startIndex;
uint actualNodeCount = Math.Min(requestedNodeCount, availableNodeCount); uint actualNodeCount = Math.Min(requestedNodeCount, availableNodeCount);

Просмотреть файл

@ -8,9 +8,9 @@ namespace OpcPublisher
/// </summary> /// </summary>
public class GetConfiguredNodesMethodData public class GetConfiguredNodesMethodData
{ {
public string EndpointUrl; public string EndpointUrl { get; set; }
public string PublishInterval; public string PublishInterval { get; set; }
public string SamplingInterval; public string SamplingInterval { get; set; }
} }
public class NodeModel public class NodeModel
@ -22,13 +22,13 @@ namespace OpcPublisher
OpcSamplingInterval = opcSamplingInterval; OpcSamplingInterval = opcSamplingInterval;
} }
public string Id; public string Id { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Include)] [JsonProperty(NullValueHandling = NullValueHandling.Include)]
public int? OpcPublishingInterval; public int? OpcPublishingInterval { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Include)] [JsonProperty(NullValueHandling = NullValueHandling.Include)]
public int? OpcSamplingInterval; public int? OpcSamplingInterval { get; set; }
} }
public class PublishNodesMethodRequestModel public class PublishNodesMethodRequestModel
@ -42,17 +42,17 @@ namespace OpcPublisher
Password = password; Password = password;
} }
public string EndpointUrl; public string EndpointUrl { get; set; }
public List<NodeModel> Nodes; public List<NodeModel> Nodes { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public bool UseSecurity; public bool UseSecurity { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string UserName; public string UserName { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string Password; public string Password { get; set; }
} }
public class UnpublishNodesMethodRequestModel public class UnpublishNodesMethodRequestModel
@ -63,8 +63,8 @@ namespace OpcPublisher
EndpointUrl = endpointUrl; EndpointUrl = endpointUrl;
} }
public string EndpointUrl; public string EndpointUrl { get; set; }
public List<NodeModel> Nodes; public List<NodeModel> Nodes { get; set; }
} }
public class UnpublishAllNodesMethodRequestModel public class UnpublishAllNodesMethodRequestModel
@ -74,22 +74,19 @@ namespace OpcPublisher
EndpointUrl = endpointUrl; EndpointUrl = endpointUrl;
} }
public string EndpointUrl; public string EndpointUrl { get; set; }
} }
public class GetConfiguredEndpointsMethodRequestModel public class GetConfiguredEndpointsMethodRequestModel
{ {
public GetConfiguredEndpointsMethodRequestModel(uint? count = null, ulong? continuationToken = null) public GetConfiguredEndpointsMethodRequestModel(ulong? continuationToken = null)
{ {
Count = count;
ContinuationToken = continuationToken; ContinuationToken = continuationToken;
} }
[JsonProperty(NullValueHandling = NullValueHandling.Include)]
public uint? Count;
[JsonProperty(NullValueHandling = NullValueHandling.Include)] [JsonProperty(NullValueHandling = NullValueHandling.Include)]
public ulong? ContinuationToken; public ulong? ContinuationToken { get; set; }
} }
@ -104,7 +101,7 @@ namespace OpcPublisher
{ {
Endpoints = endpoints; Endpoints = endpoints;
} }
public List<string> Endpoints; public List<string> Endpoints { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public ulong? ContinuationToken; public ulong? ContinuationToken;
@ -112,20 +109,16 @@ namespace OpcPublisher
public class GetConfiguredNodesOnEndpointMethodRequestModel public class GetConfiguredNodesOnEndpointMethodRequestModel
{ {
public GetConfiguredNodesOnEndpointMethodRequestModel(string endpointUrl, uint? count = null, ulong? continuationToken = null) public GetConfiguredNodesOnEndpointMethodRequestModel(string endpointUrl, ulong? continuationToken = null)
{ {
EndpointUrl = endpointUrl; EndpointUrl = endpointUrl;
Count = count;
ContinuationToken = continuationToken; ContinuationToken = continuationToken;
} }
[JsonProperty(NullValueHandling = NullValueHandling.Include)] [JsonProperty(NullValueHandling = NullValueHandling.Include)]
public string EndpointUrl; public string EndpointUrl { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Include)] [JsonProperty(NullValueHandling = NullValueHandling.Include)]
public uint? Count; public ulong? ContinuationToken { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Include)]
public ulong? ContinuationToken;
} }
@ -142,9 +135,9 @@ namespace OpcPublisher
} }
[JsonProperty(NullValueHandling = NullValueHandling.Include)] [JsonProperty(NullValueHandling = NullValueHandling.Include)]
public List<NodeModel> Nodes; public List<NodeModel> Nodes { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public ulong? ContinuationToken; public ulong? ContinuationToken { get; set; }
} }
} }

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -37,21 +37,21 @@ namespace OpcPublisher
ExpandedNodeId ExpandedNodeId
} }
public string DisplayName; public string DisplayName { get; set; }
public OpcMonitoredItemState State; public OpcMonitoredItemState State { get; set; }
public uint AttributeId; public uint AttributeId { get; set; }
public MonitoringMode MonitoringMode; public MonitoringMode MonitoringMode { get; set; }
public int RequestedSamplingInterval; public int RequestedSamplingInterval { get; set; }
public int SamplingInterval; public int SamplingInterval { get; set; }
public uint QueueSize; public uint QueueSize { get; set; }
public bool DiscardOldest; public bool DiscardOldest { get; set; }
public MonitoredItemNotificationEventHandler Notification; public MonitoredItemNotificationEventHandler Notification { get; set; }
public Uri EndpointUrl; public Uri EndpointUrl { get; set; }
public MonitoredItem OpcUaClientMonitoredItem; public MonitoredItem OpcUaClientMonitoredItem { get; set; }
public NodeId ConfigNodeId; public NodeId ConfigNodeId { get; set; }
public ExpandedNodeId ConfigExpandedNodeId; public ExpandedNodeId ConfigExpandedNodeId { get; set; }
public string OriginalId; public string OriginalId { get; set; }
public OpcMonitoredItemConfigurationType ConfigType; public OpcMonitoredItemConfigurationType ConfigType { get; set; }
/// <summary> /// <summary>
/// Ctor using NodeId (ns syntax for namespace). /// Ctor using NodeId (ns syntax for namespace).

Просмотреть файл

@ -84,12 +84,12 @@ namespace OpcPublisher
public static int LdsRegistrationInterval { get; set; } = 0; public static int LdsRegistrationInterval { get; set; } = 0;
public static int OpcTraceToLoggerVerbose = 0; public static int OpcTraceToLoggerVerbose { get; set; } = 0;
public static int OpcTraceToLoggerDebug = 0; public static int OpcTraceToLoggerDebug { get; set; } = 0;
public static int OpcTraceToLoggerInformation = 0; public static int OpcTraceToLoggerInformation { get; set; } = 0;
public static int OpcTraceToLoggerWarning = 0; public static int OpcTraceToLoggerWarning { get; set; } = 0;
public static int OpcTraceToLoggerError = 0; public static int OpcTraceToLoggerError { get; set; } = 0;
public static int OpcTraceToLoggerFatal = 0; public static int OpcTraceToLoggerFatal { get; set; } = 0;
/// <summary> /// <summary>
/// Configures all OPC stack settings /// Configures all OPC stack settings

Просмотреть файл

@ -34,9 +34,9 @@ namespace OpcPublisher
public static uint PublisherShutdownWaitPeriod { get; } = 10; public static uint PublisherShutdownWaitPeriod { get; } = 10;
public static DateTime PublisherStartTime = DateTime.UtcNow; public static DateTime PublisherStartTime { get; set; } = DateTime.UtcNow;
public static Serilog.Core.Logger Logger = null; public static Serilog.Core.Logger Logger { get; set; } = null;
/// <summary> /// <summary>
/// Synchronous main method of the app. /// Synchronous main method of the app.
@ -91,6 +91,19 @@ namespace OpcPublisher
} }
} }
}, },
{ "sd|shopfloordomain=", $"same as site option, only there for backward compatibility\n" +
"The value must follow the syntactical rules of a DNS hostname.\nDefault: not set", (string s) => {
Regex siteNameRegex = new Regex("^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$");
if (siteNameRegex.IsMatch(s))
{
PublisherSite = s;
}
else
{
throw new OptionException("The shopfloor domain is not a valid DNS hostname.", "shopfloordomain");
}
}
},
{ "ic|iotcentral", $"publisher will send OPC UA data in IoTCentral compatible format (DisplayName of a node is used as key, this key is the Field name in IoTCentral). you need to ensure that all DisplayName's are unique. (Auto enables fetch display name)\nDefault: {IotCentralMode}", b => IotCentralMode = FetchOpcNodeDisplayName = b != null }, { "ic|iotcentral", $"publisher will send OPC UA data in IoTCentral compatible format (DisplayName of a node is used as key, this key is the Field name in IoTCentral). you need to ensure that all DisplayName's are unique. (Auto enables fetch display name)\nDefault: {IotCentralMode}", b => IotCentralMode = FetchOpcNodeDisplayName = b != null },
{ "sw|sessionconnectwait=", $"specify the wait time in seconds publisher is trying to connect to disconnected endpoints and starts monitoring unmonitored items\nMin: 10\nDefault: {_publisherSessionConnectWaitSec}", (int i) => { { "sw|sessionconnectwait=", $"specify the wait time in seconds publisher is trying to connect to disconnected endpoints and starts monitoring unmonitored items\nMin: 10\nDefault: {_publisherSessionConnectWaitSec}", (int i) => {
if (i > 10) if (i > 10)

Просмотреть файл

@ -18,10 +18,10 @@ namespace OpcPublisher
public static class PublisherNodeConfiguration public static class PublisherNodeConfiguration
{ {
public static SemaphoreSlim PublisherNodeConfigurationSemaphore; public static SemaphoreSlim PublisherNodeConfigurationSemaphore { get; set; }
public static SemaphoreSlim PublisherNodeConfigurationFileSemaphore; public static SemaphoreSlim PublisherNodeConfigurationFileSemaphore { get; set; }
public static List<OpcSession> OpcSessions; public static List<OpcSession> OpcSessions { get; set; }
public static SemaphoreSlim OpcSessionsListSemaphore; public static SemaphoreSlim OpcSessionsListSemaphore { get; set; }
public static string PublisherNodeConfigurationFilename { get; set; } = $"{System.IO.Directory.GetCurrentDirectory()}{Path.DirectorySeparatorChar}publishednodes.json"; public static string PublisherNodeConfigurationFilename { get; set; } = $"{System.IO.Directory.GetCurrentDirectory()}{Path.DirectorySeparatorChar}publishednodes.json";

Просмотреть файл

@ -114,8 +114,8 @@ namespace OpcPublisher
MethodState getPublishedNodesLegacyMethod = CreateMethod(methodsFolder, "GetPublishedNodes", "GetPublishedNodes"); MethodState getPublishedNodesLegacyMethod = CreateMethod(methodsFolder, "GetPublishedNodes", "GetPublishedNodes");
SetGetPublishedNodesLegacyMethodProperties(ref getPublishedNodesLegacyMethod); SetGetPublishedNodesLegacyMethodProperties(ref getPublishedNodesLegacyMethod);
MethodState getConfiguredNodesMethod = CreateMethod(methodsFolder, "GetConfiguredNodes", "GetConfiguredNodes"); MethodState getConfiguredNodesOnEndpointMethod = CreateMethod(methodsFolder, "GetConfiguredNodesOnEndpoint", "GetConfiguredNodesOnEndpoint");
SetGetConfiguredNodesMethodProperties(ref getConfiguredNodesMethod); SetGetConfiguredNodesOnEndpointMethodProperties(ref getConfiguredNodesOnEndpointMethod);
} }
catch (Exception e) catch (Exception e)
{ {
@ -221,9 +221,9 @@ namespace OpcPublisher
} }
/// <summary> /// <summary>
/// Sets properies of the GetConfigruredNodes method. /// Sets properies of the GetConfigruredNodesOnEndpoint method.
/// </summary> /// </summary>
private void SetGetConfiguredNodesMethodProperties(ref MethodState method) private void SetGetConfiguredNodesOnEndpointMethodProperties(ref MethodState method)
{ {
// define input arguments // define input arguments
method.InputArguments = new PropertyState<Argument[]>(method) method.InputArguments = new PropertyState<Argument[]>(method)
@ -256,9 +256,9 @@ namespace OpcPublisher
method.OutputArguments.Value = new Argument[] method.OutputArguments.Value = new Argument[]
{ {
new Argument() { Name = "Configured nodes", Description = "List of the nodes configured to publish in OPC Publisher", DataType = DataTypeIds.String, ValueRank = ValueRanks.Scalar } new Argument() { Name = "Configured nodes on endpoint", Description = "List of the nodes configured on the specifcied endpoint to publish in OPC Publisher", DataType = DataTypeIds.String, ValueRank = ValueRanks.Scalar }
}; };
method.OnCallMethod = new GenericMethodCalledEventHandler(OnGetConfiguredNodesCall); method.OnCallMethod = new GenericMethodCalledEventHandler(OnGetConfiguredNodesOnEndpointCall);
} }
/// <summary> /// <summary>
@ -689,15 +689,15 @@ namespace OpcPublisher
} }
/// <summary> /// <summary>
/// Method to get the list of configured nodes, which returns the list in new format. Executes synchronously. /// Method to get the list of configured nodes on the psecified endpoint, which returns the list in new format. Executes synchronously.
/// </summary> /// </summary>
private ServiceResult OnGetConfiguredNodesCall(ISystemContext context, MethodState method, IList<object> inputArguments, IList<object> outputArguments) private ServiceResult OnGetConfiguredNodesOnEndpointCall(ISystemContext context, MethodState method, IList<object> inputArguments, IList<object> outputArguments)
{ {
Uri endpointUrl = null; Uri endpointUrl = null;
if (string.IsNullOrEmpty(inputArguments[0] as string)) if (string.IsNullOrEmpty(inputArguments[0] as string))
{ {
Logger.Error($"OnGetConfiguredNodesCall: endpointUrl is null or empty'!"); Logger.Error($"OnGetConfiguredNodesOnEndpointCall: endpointUrl is null or empty'!");
return ServiceResult.Create(StatusCodes.BadArgumentsMissing, "Please provide a valid OPC UA endpoint URL as first argument!"); return ServiceResult.Create(StatusCodes.BadArgumentsMissing, "Please provide a valid OPC UA endpoint URL as first argument!");
} }
else else
@ -708,7 +708,7 @@ namespace OpcPublisher
} }
catch (UriFormatException) catch (UriFormatException)
{ {
Logger.Error($"OnGetConfiguredNodesCall: The endpointUrl is invalid '{inputArguments[0] as string}'!"); Logger.Error($"OnGetConfiguredNodesOnEndpointCall: The endpointUrl is invalid '{inputArguments[0] as string}'!");
return ServiceResult.Create(StatusCodes.BadArgumentsMissing, "Please provide a valid OPC UA endpoint URL as first argument!"); return ServiceResult.Create(StatusCodes.BadArgumentsMissing, "Please provide a valid OPC UA endpoint URL as first argument!");
} }
} }
@ -716,7 +716,7 @@ namespace OpcPublisher
// get the list of published nodes in NodeId format // get the list of published nodes in NodeId format
uint nodeConfigVersion = 0; uint nodeConfigVersion = 0;
outputArguments[0] = JsonConvert.SerializeObject(GetPublisherConfigurationFileEntries(endpointUrl, false, out nodeConfigVersion)); outputArguments[0] = JsonConvert.SerializeObject(GetPublisherConfigurationFileEntries(endpointUrl, false, out nodeConfigVersion));
Logger.Information("OnGetConfiguredNodesCall: Success!"); Logger.Information("OnGetConfiguredNodesOnEndpointCall: Success!");
return ServiceResult.Good; return ServiceResult.Good;
} }

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework> <TargetFramework>netcoreapp2.1</TargetFramework>
<AssemblyName>OpcPublisher</AssemblyName> <AssemblyName>opcpublisher</AssemblyName>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<PackageId>OpcPublisher</PackageId> <PackageId>OpcPublisher</PackageId>
<RuntimeFrameworkVersion>2.0</RuntimeFrameworkVersion> <RuntimeFrameworkVersion>2.1</RuntimeFrameworkVersion>
<GenerateAssemblyCompanyAttribute>true</GenerateAssemblyCompanyAttribute> <GenerateAssemblyCompanyAttribute>true</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyVersionAttribute>true</GenerateAssemblyVersionAttribute> <GenerateAssemblyVersionAttribute>true</GenerateAssemblyVersionAttribute>
<Description>This application subscribes to a configurable set of nodes in OPC UA server systems and publish them to Azure IoTHub.</Description> <Description>This application subscribes to a configurable set of nodes in OPC UA server systems and publish them to Azure IoTHub.</Description>
@ -33,6 +33,10 @@
</Content> </Content>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Properties\" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Azure.Devices" Version="1.16.0" /> <PackageReference Include="Microsoft.Azure.Devices" Version="1.16.0" />
<PackageReference Include="Microsoft.Azure.Devices.Client" Version="1.17.0" /> <PackageReference Include="Microsoft.Azure.Devices.Client" Version="1.17.0" />
@ -44,8 +48,4 @@
<PackageReference Include="Serilog.Sinks.File" Version="4.0.0" /> <PackageReference Include="Serilog.Sinks.File" Version="4.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Properties\" />
</ItemGroup>
</Project> </Project>

Просмотреть файл

Просмотреть файл

@ -1,40 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2036
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpcPublisher", "OpcPublisher.csproj", "{EAC47E1C-39F4-4E51-A241-88432552D461}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{560B34E9-68E3-4033-94D4-CE24073F5904}"
ProjectSection(SolutionItems) = preProject
..\.gitattributes = ..\.gitattributes
..\.gitignore = ..\.gitignore
..\.travis.yml = ..\.travis.yml
..\appveyor.yml = ..\appveyor.yml
..\Dockerfile.amd64 = ..\Dockerfile.amd64
..\Dockerfile.amd64.debug = ..\Dockerfile.amd64.debug
..\Dockerfile.arm32v7 = ..\Dockerfile.arm32v7
..\Dockerfile.ssh = ..\Dockerfile.ssh
..\Dockerfile.windows-amd64 = ..\Dockerfile.windows-amd64
..\License.txt = ..\License.txt
..\README.md = ..\README.md
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EAC47E1C-39F4-4E51-A241-88432552D461}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EAC47E1C-39F4-4E51-A241-88432552D461}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EAC47E1C-39F4-4E51-A241-88432552D461}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EAC47E1C-39F4-4E51-A241-88432552D461}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C1B8DD9F-B491-4E8A-8DF9-3077636E9A84}
EndGlobalSection
EndGlobal